- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 16)
Drupal\user\RoleStorage->isPermissionInRoles('access site in maintenance mode', Array) (Line: 112)
Drupal\Core\Session\UserSession->hasPermission('access site in maintenance mode') (Line: 105)
Drupal\Core\Session\AccountProxy->hasPermission('access site in maintenance mode') (Line: 83)
Drupal\redirect\RedirectChecker->canRedirect(Object) (Line: 120)
Drupal\redirect\EventSubscriber\RedirectRequestSubscriber->onKernelRequestCheckRedirect(Object, 'kernel.request', Object)
call_user_func(Array, Object, 'kernel.request', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.request') (Line: 145)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 35)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2318)
Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697)
Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('views') (Line: 1316)
Drupal\views\Plugin\views\query\Sql->query() (Line: 1454)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('views_substitutions', Array) (Line: 1418)
Drupal\views\Plugin\views\query\Sql->query() (Line: 1454)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('views') (Line: 1316)
Drupal\views\Plugin\views\query\Sql->query(1) (Line: 1455)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('views_substitutions', Array) (Line: 1418)
Drupal\views\Plugin\views\query\Sql->query(1) (Line: 1455)
Drupal\views\Plugin\views\query\Sql->build(Object) (Line: 1326)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 54)
Drupal\views\Plugin\views\argument\ManyToOne->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 82)
Drupal\views\Plugin\views\argument\ArgumentPluginBase->init(Object, Object, Array) (Line: 33)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 35)
Drupal\views\Plugin\views\argument\ManyToOne->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('argument') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('argument', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 1876)
Drupal\views\ViewExecutable->buildTitle() (Line: 338)
Drupal\views\Plugin\views\display\Feed->attachTo(Object, 'page_1', Array) (Line: 1733)
Drupal\views\ViewExecutable->attachDisplays() (Line: 1333)
Drupal\views\ViewExecutable->build() (Line: 392)
Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 196)
Drupal\views\Plugin\views\display\Page->execute() (Line: 1635)
Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81)
Drupal\views\Element\View::preRenderViewElement(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfd7d757-68ec-4277-91d3-4544c1af8d97') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfd7d757-68ec-4277-91d3-4544c1af8d97') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfd7d757-68ec-4277-91d3-4544c1af8d97') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfd7d757-68ec-4277-91d3-4544c1af8d97') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-241ef9b1-2649-4f32-952d-d70ca7c16958') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-241ef9b1-2649-4f32-952d-d70ca7c16958') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-241ef9b1-2649-4f32-952d-d70ca7c16958') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-241ef9b1-2649-4f32-952d-d70ca7c16958') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc67b78b-87b0-4a8b-b88e-6d13780d588a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc67b78b-87b0-4a8b-b88e-6d13780d588a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc67b78b-87b0-4a8b-b88e-6d13780d588a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc67b78b-87b0-4a8b-b88e-6d13780d588a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b462bfde-3aa1-4009-9818-a6e1c2385629') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b462bfde-3aa1-4009-9818-a6e1c2385629') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b462bfde-3aa1-4009-9818-a6e1c2385629') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b462bfde-3aa1-4009-9818-a6e1c2385629') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4da3511f-b37e-498c-87d5-fef49d4e6f3a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4da3511f-b37e-498c-87d5-fef49d4e6f3a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4da3511f-b37e-498c-87d5-fef49d4e6f3a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-4da3511f-b37e-498c-87d5-fef49d4e6f3a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-76d67756-9f44-4cdf-8a00-fd2595c02cff') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-76d67756-9f44-4cdf-8a00-fd2595c02cff') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-76d67756-9f44-4cdf-8a00-fd2595c02cff') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-76d67756-9f44-4cdf-8a00-fd2595c02cff') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-be388e16-3076-4773-a922-8f71341cfdd8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-be388e16-3076-4773-a922-8f71341cfdd8') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-be388e16-3076-4773-a922-8f71341cfdd8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-be388e16-3076-4773-a922-8f71341cfdd8') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0a1f148a-76b1-4c1e-9b96-6f1e070aa73e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0a1f148a-76b1-4c1e-9b96-6f1e070aa73e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0a1f148a-76b1-4c1e-9b96-6f1e070aa73e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-0a1f148a-76b1-4c1e-9b96-6f1e070aa73e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc399a0a-a894-4b8e-a21d-a98b91a78f18') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc399a0a-a894-4b8e-a21d-a98b91a78f18') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc399a0a-a894-4b8e-a21d-a98b91a78f18') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-fc399a0a-a894-4b8e-a21d-a98b91a78f18') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-44e49954-4e79-44c5-bfc8-d7a0c885b643') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-44e49954-4e79-44c5-bfc8-d7a0c885b643') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-44e49954-4e79-44c5-bfc8-d7a0c885b643') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-44e49954-4e79-44c5-bfc8-d7a0c885b643') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3f704e0-d1d7-48cd-8b99-9a510ec7a1d7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3f704e0-d1d7-48cd-8b99-9a510ec7a1d7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3f704e0-d1d7-48cd-8b99-9a510ec7a1d7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b3f704e0-d1d7-48cd-8b99-9a510ec7a1d7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b05d627c-3ce9-4b27-a05d-c5949774f847') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b05d627c-3ce9-4b27-a05d-c5949774f847') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b05d627c-3ce9-4b27-a05d-c5949774f847') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b05d627c-3ce9-4b27-a05d-c5949774f847') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dcb689d5-3ba9-44f3-8cab-360971191485') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dcb689d5-3ba9-44f3-8cab-360971191485') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dcb689d5-3ba9-44f3-8cab-360971191485') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dcb689d5-3ba9-44f3-8cab-360971191485') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-aa9d8304-93d2-4702-be43-2a12e366f884') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-aa9d8304-93d2-4702-be43-2a12e366f884') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-aa9d8304-93d2-4702-be43-2a12e366f884') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-aa9d8304-93d2-4702-be43-2a12e366f884') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('El objeto visual <strong>Variance Chart - XViz</strong> de <em>Visual BI Solutions</em> nos permite comparar dos conjuntos de valores (o un conjunto de valores en dos estados distintos), visualizando tanto el incremento como el porcentaje que éste representa.
El panel de campos de esta visualización incluye tres campos (más el campo <em>Tooltip Value</em> que incluye información adicional en la ventana emergente que se muestra al mover el cursor por encima de la gráfica):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_01.jpg"></a>
Obsérvese que el panel de configuración de esta visualización se muestra en inglés aun cuando la interfaz de Power BI esté en español.
<ul><li>Campo <em>Category</em>: Campo (que será interpretado como categórico) que determinará la segmentación a aplicar a las métricas. Se admite más de uno.</li>
<li>Campo <em>Primary Value</em>: Recibirá la métrica principal. Puede ser un campo o una medida. Solo se admite uno.</li>
<li>Campo <em>Comparison Value</em>: Recibirá la métrica secundaria con la que comparar la métrica principal. Igualmente puede ser un campo o una medida, pero solo se admite uno.</li>
</ul>Por ejemplo, supongamos que tenemos definidas sendas medidas para calcular las ventas en el contexto actual y las ventas para el mismo período del año anterior:
Sales CY = SUM(Sales[Amount])
Sales LY = CALCULATE([Sales CY]; SAMEPERIODLASTYEAR('Calendar'[Date]))
Si deseamos comparar los valores para un año concreto, digamos 2018 -con independencia del método por el que estemos realizando este filtrado-, bastaría con arrastrar la medida <em>Sales CY</em> al campo <em>Primary Value</em> y la medida <em>Sales LY</em> al campo <em>Comparison Value</em>. La visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_02.jpg"></a>
Vemos que se muestran, a la izquierda, dos barras horizontales (de color negro y gris) representando los valores principal (la barra de color negro) y secundario (la barra de color gris) -solo se muestra el valor numérico correspondiente al valor principal, 1.88 M€-. A continuación se representa la variación entre las dos cifras (545.83 K€ en este ejemplo) tanto con una etiqueta como con una barra, de color verde en este ejemplo pues la variación es positiva. Si fuese negativa se mostraría de color rojo, aunque estos colores pueden personalizarse en <em>Formato > Data Colors</em>. Por último se muestra el porcentaje que esta variación representa con respecto al valor secundario (40.9% en el ejemplo).
Podemos confirmar estos valores si definimos las medidas adecuadas (calculando la variación de la cifra de ventas y el porcentaje que representa) y las llevamos a una tabla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_03.jpg"></a>
Podemos desglosar las cifras mostradas en la visualización según un criterio adicional si llevamos un campo categórico al campo <em>Category</em> de la visualización. Por ejemplo, llevemos el campo <em>Country</em> (conteniendo los países en los que se realizan las ventas) a <em>Category</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_04.jpg"></a>
...vemos las cifras de ventas para el año actual y para el año anterior para cada uno de los países, con la variación y el porcentaje correspondiente.
Si hacemos clic en el icono con forma de rejilla que se muestra cerca de la esquina superior derecha de la visualización entramos en una especie de "modo de enfoque" en el que se muestran solo las cifras numéricas, con un práctico filtro en la parte superior que nos permite buscar la "categoría" (país en nuestro ejemplo) que nos interese:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_05.jpg"></a>
Volviendo al informe, si movemos el cursor por encima de la gráfica se abre la típica ventana emergente con la información asociada, incluyendo los campos que hayamos llevado al campo <em>Tooltip Value</em> de la visualización. Por ejemplo, en la siguiente imagen se ha llevado la medida <em>Units</em> (con la suma del número de unidades vendidas) a dicho campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_06.jpg"></a>
En todo caso, esta cifra de unidades no cambia si movemos el cursor por encima de las barras representando las métricas, si lo movemos por encima de la barra que representa la variación o por encima de las etiquetas mostrando el porcentaje de variación.
Si hacemos clic en el círculo amarillo conteniendo el icono de un lápiz que se encuentra cerca de la misma esquina superior izquierda también entramos en una especie de "modo de enfoque" que nos permite aplicar formato condicional a las barras que representan la métrica principal y secundaria:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_07.jpg"></a>
Por ejemplo, si hacemos clic en el signo "+" que se muestra a la derecha del texto "<em>Apply to Sales CY</em>" se nos muestra el panel de formato para esta métrica. Podemos optar por aplicar un formato en función de una regla o aplicar una escala de colores (selector "<em>Format by</em>"). El aspecto del panel de formato en este último caso es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_08.jpg"></a>
Si guardamos el formato con las opciones por defecto (haciendo clic en el botón <em>Save</em>) y volvemos al informe, la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_09.jpg"></a>
Apliquemos ahora un formato condicional basado en regla a las barras representando las ventas del año anterior. Para ello volvemos a hacer clic en el botón amarillo conteniendo el icono del lápiz, un clic en el signo + que se muestra a la derecha del texto "<em>Apply to Sales LY</em>" y dejamos la opción <em>Rule</em> que se muestra bajo el texto <em>Format by</em> (opción que determina el criterio de aplicación del formato condicional). A continuación deberemos configurar la condición. Para ello debemos escoger uno de los campos que hemos llevado a la visualización. Si, por ejemplo, simplemente deseásemos resaltar las columnas representando a España y Portugal, escogeríamos el campo <em>Country</em> y -en la parte superior- el color aplicar. Por último escogemos un operador y los "miembros" a añadir:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_10.jpg"></a>
Tras guardar esta configuración y volver al informe veríamos la visualización con el nuevo formato:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_11.jpg"></a>
En <em>Formato > Variance Chart Options</em> podemos escoger entre mostrar la gráfica vertical u horizontalmente, mostrar o no el valor medio de las métricas (columna "<em>Average</em>" en la siguiente imagen), el criterio de ordenación, etc.:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_12.jpg"></a>
En <em>Formato > Series Type</em> podemos especificar si queremos que las barras (o columnas, según como las estemos mostrando) se muestren solapadas, tal y como se han mostrado en las capturas de pantalla hasta ahora, o apiladas (véase la siguiente imagen). En <em>Formato > Data labels</em> podemos dar formato a las etiquetas. Por ejemplo, podemos optar por aplicar un fondo blanco en lugar del gris claro que se aplica por defecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_13.jpg"></a>
En el panel de formato encontramos multitud de opciones para dar formato a los números, ejes, leyenda... En este sentido se trata de una visualización altamente configurable y práctica.
Hay que comentar que una selección en una de las barras (o columnas) filtra la tabla correspondiente a dicha etiqueta, pero el clic hay que realizarlo en las barras o cifras, no en la etiqueta de la categoría.
Si hemos llevado más de un campo o medida al campo <em>Category</em> de la visualización vemos los típicos controles de Power BI permitiéndonos recorrer la estructura jerárquica. En la siguiente imagen se ha llevado a <em>Category</em> los campos <em>Country</em> y <em>Region</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-09/variance_chart_xviz_14.jpg"></a>
En la imagen anterior podemos ver variaciones negativas representadas por barras rojas.
En resumen, muy interesante visualización con una utilidad muy concreta pero bien desarrollada.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-21ed345b-bfe3-4ef0-ac6f-90181e38c0cf') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-21ed345b-bfe3-4ef0-ac6f-90181e38c0cf') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-21ed345b-bfe3-4ef0-ac6f-90181e38c0cf') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-21ed345b-bfe3-4ef0-ac6f-90181e38c0cf') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7f62cc1b-4801-4a81-8a31-e05ccad0fb15') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7f62cc1b-4801-4a81-8a31-e05ccad0fb15') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7f62cc1b-4801-4a81-8a31-e05ccad0fb15') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-7f62cc1b-4801-4a81-8a31-e05ccad0fb15') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-f2a1dd2c-2452-4782-b5d7-d1fb77f0f58b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-f2a1dd2c-2452-4782-b5d7-d1fb77f0f58b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-f2a1dd2c-2452-4782-b5d7-d1fb77f0f58b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-f2a1dd2c-2452-4782-b5d7-d1fb77f0f58b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6056d341-8092-4adb-bf48-42cbe948a63e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6056d341-8092-4adb-bf48-42cbe948a63e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6056d341-8092-4adb-bf48-42cbe948a63e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6056d341-8092-4adb-bf48-42cbe948a63e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c8288e5-f575-46b7-a9fb-46a0e4248b1d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c8288e5-f575-46b7-a9fb-46a0e4248b1d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c8288e5-f575-46b7-a9fb-46a0e4248b1d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c8288e5-f575-46b7-a9fb-46a0e4248b1d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta visualización, <strong>Circle KPI Gauge</strong>, es una especie de gráfica de donuts que muestra un porcentaje. Consta de dos anillos, uno interior, fijo, y otro exterior que marca el porcentaje en cuestión. En ambos casos es posible configurar el color, ancho, etc. El panel de configuración es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_01.jpg"></a>
Está compuesto por apenas un único campo que contiene la métrica (el porcentaje) a mostrar. Si llevamos a este campo una medida que calcule el porcentaje de ventas de un cierto país con respecto al total, por ejemplo, el resultado es el mostrado en la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_02.jpg"></a>
El color del anillo exterior (el que representa el porcentaje) puede hacerse depender del valor a representar. Para esto, la visualización incluye dos umbrales que dividen los porcentajes en tres zonas, siendo posible asignar a cada zona un color distinto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_03.jpg"></a>
También es posible controlar el ancho de los dos anillos, así como la posición del anillo exterior con respecto al centro del círculo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_04.jpg"></a>
En la siguiente imagen se muestra el efecto de modificar estas últimas herramientas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/circle_kpi_gauge_05.jpg"></a>
Y no se incluyen otras opciones de visualización: se puede, por ejemplo, modificar el fondo de toda la visualización, pero no solo el interior del círculo. Tampoco permite dar formato a la etiqueta interior, que se muestra siempre con dos cifras decimales.
En resumen, se trata de una visualización muy sencilla pero que puede resultar muy útil en determinadas circunstancias.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b8891037-784d-4c96-8a69-c91d1c025b84') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b8891037-784d-4c96-8a69-c91d1c025b84') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b8891037-784d-4c96-8a69-c91d1c025b84') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-b8891037-784d-4c96-8a69-c91d1c025b84') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cccc0695-f437-438c-93cf-193542035fce') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cccc0695-f437-438c-93cf-193542035fce') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cccc0695-f437-438c-93cf-193542035fce') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cccc0695-f437-438c-93cf-193542035fce') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d76dcc78-af24-45b6-9fe0-25df67517af7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d76dcc78-af24-45b6-9fe0-25df67517af7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d76dcc78-af24-45b6-9fe0-25df67517af7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-d76dcc78-af24-45b6-9fe0-25df67517af7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc8f6cea-8b62-4cc1-abdd-47160984e92d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc8f6cea-8b62-4cc1-abdd-47160984e92d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc8f6cea-8b62-4cc1-abdd-47160984e92d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bc8f6cea-8b62-4cc1-abdd-47160984e92d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dc67599d-f1de-4de8-a6b7-c0a76f58ad57') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dc67599d-f1de-4de8-a6b7-c0a76f58ad57') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dc67599d-f1de-4de8-a6b7-c0a76f58ad57') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dc67599d-f1de-4de8-a6b7-c0a76f58ad57') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bb580bdd-8a52-4118-be16-e893aa04907e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bb580bdd-8a52-4118-be16-e893aa04907e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bb580bdd-8a52-4118-be16-e893aa04907e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-bb580bdd-8a52-4118-be16-e893aa04907e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-878df4cb-4c68-4bc7-bddc-da69373f5320') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-878df4cb-4c68-4bc7-bddc-da69373f5320') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-878df4cb-4c68-4bc7-bddc-da69373f5320') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-878df4cb-4c68-4bc7-bddc-da69373f5320') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-107109ce-be7e-49cd-9c4f-2ef963d8da29') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-107109ce-be7e-49cd-9c4f-2ef963d8da29') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-107109ce-be7e-49cd-9c4f-2ef963d8da29') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-107109ce-be7e-49cd-9c4f-2ef963d8da29') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-43a1f4ce-8faf-4f40-80f8-d73a941de12d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-43a1f4ce-8faf-4f40-80f8-d73a941de12d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-43a1f4ce-8faf-4f40-80f8-d73a941de12d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-43a1f4ce-8faf-4f40-80f8-d73a941de12d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-41ffd6bf-4417-41fe-8ff5-bc51aed41eeb') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-41ffd6bf-4417-41fe-8ff5-bc51aed41eeb') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-41ffd6bf-4417-41fe-8ff5-bc51aed41eeb') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-41ffd6bf-4417-41fe-8ff5-bc51aed41eeb') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6bfd53c2-3173-4be3-a063-af5bcfdf4bc5') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6bfd53c2-3173-4be3-a063-af5bcfdf4bc5') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6bfd53c2-3173-4be3-a063-af5bcfdf4bc5') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-6bfd53c2-3173-4be3-a063-af5bcfdf4bc5') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>Data Insights by MAQ Software</strong>, tal y como nos sugiere el nombre, nos permite recorrer nuestros datos buscando información útil, y hacerlo no solo involucrando diferentes campos de forma razonablemente fácil, sino plasmando el resultado en el informe también de formas diferentes.
Si llevamos la visualización a nuestro informe y echamos un vistazo al panel de configuración, comprobamos que solo ofrece un campo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_01.jpg"></a>
Podemos llevar a este campo de la visualización tantos campos y medidas de nuestro modelo de datos como deseemos, por ejemplo:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_02.jpg"></a>
La visualización, por defecto, se muestra vacía:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_03.jpg"></a>
Hay que decir que esta visualización requiere bastante espacio en el informe para poder ser utilizada cómodamente. Ampliemos su tamaño y hagamos clic en la etiqueta <em>X-axis: Sales</em> que se muestra en su parte inferior:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_04.jpg"></a>
Vemos que podemos escoger el campo o medida que deseemos para este eje, y lo mismo podríamos hacer para el eje Y. Esto nos da una buena pista de cómo funciona la visualización: escogemos los campos a mostrar en cada eje, y, supuestamente, la visualización nos crea una gráfica de algún tipo mostrando la información en cuestión. El problema es que no es tan intuitivo como puede parecer: si escogemos en el eje X el campo <em>Country</em> (países donde se realizan las ventas) y en el eje Y la medida <em>Sales</em> (con la suma de las ventas), la visualización se muestra vacía con un mensaje que nos pide que escojamos otra categoría para la segmentación (en "bins"). Efectivamente vemos en el menú superior que se está segmentando por <em>Sales</em> ¿cuándo hemos seleccionado esto? Escogemos la opción None y comprobamos que la visualización sigue vacía. Seguimos haciendo pruebas y seleccionamos en <em>View as</em> del mismo menú superior un tipo de gráfica (<em>Column</em>, por ejemplo) -no se escoge uno por defecto en función del tipo de datos seleccionados-. Ahora se muestra en la visualización unos números pero no hay gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_05.jpg"></a>
Si quitamos la opción <em>Sales</em> que también se selecciona automáticamente en <em>Color By</em> entonces -y solo entonces- vemos una gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_06.jpg"></a>
Es decir, entre falta de inteligencia de la visualización (que no escoge las opciones correctas por mí) y los errores de programación (que se muestren los valores pero no las barras en un bug, claramente), la usabilidad de la visualización hasta este punto puede calificarse de mala.
Si seguimos con la misma gráfica, en <em>Color By</em> (menú superior todavía) podemos segmentar las columnas según otro criterio, por ejemplo, la categoría del producto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_07.jpg"></a>
La opción de <em>Binning by</em> funciona como los típicos <em>facets</em>: replica la gráfica segmentándola según nuevo criterio. Y si éste es numérico, podemos seleccionar el tamaño del bin en <em>Bin Size</em> (opción que se muestra en la barra superior en cuanto escogemos un criterio en <em>Binning by</em>). Desafortunadamente las opciones que se muestran para el tamaño de los bins son un poco limitadas (entre 1 y 10):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_08.jpg"></a>
Como vemos, si hay más de dos gráficas, se muestran en diferentes filas (hay una barra de desplazamiento lateral que, por cierto, se muestra sea cual sea la altura que des a la visualización, lo que afea un poco el resultado)
Una pega adicional es que las gráficas (dentro de la visualización) se muestran frecuentemente demasiado pequeñas en comparación al tamaño total ocupado por el resto de elementos de la visualización. Por ejemplo, si creamos una gráfica tipo "<em>Brick</em>" de ventas por país, éste es el resultado:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_09.jpg"></a>
(si se aplica una altura menor, la gráfica deja de verse). Si reducimos el ancho de la visualización, el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_10.jpg"></a>
Y, nuevamente, si reducimos más la altura de la visualización, la gráfica desaparece por la parte inferior. Podemos quitar todo lo que no sea la gráfica y los selectores de campos para los ejes X e Y en <em>Formato > Presentation</em> pero, lógicamente, perdemos cierta capacidad de explorar nuestros datos y, en todo caso, la visualización sigue exigiendo una altura bastante elevada si queremos que se vea la gráfica:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/data_insights_maq_software_11.jpg"></a>
Además de la gráfica tipo "brick" y columnas verticales, también podemos crear gráficas de columnas horizontales y tablas.
La visualización no permite prácticamente ninguna opción de personalización adicional en el panel de formato: mostrar o no la leyenda, el modo presentación ya comentado y cambiar la familia y tamaño de la fuente.
Aunque la idea es buena, esta visualización agradecería opciones de autoconfiguración más inteligentes y adaptar los gráficos al espacio disponible de una forma más eficaz.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2e8ed7d6-d79c-4b5b-85f9-b744a923ecb6') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2e8ed7d6-d79c-4b5b-85f9-b744a923ecb6') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2e8ed7d6-d79c-4b5b-85f9-b744a923ecb6') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2e8ed7d6-d79c-4b5b-85f9-b744a923ecb6') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8ed6c1ec-3112-4a37-9f83-b8fc38fe9840') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8ed6c1ec-3112-4a37-9f83-b8fc38fe9840') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8ed6c1ec-3112-4a37-9f83-b8fc38fe9840') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-8ed6c1ec-3112-4a37-9f83-b8fc38fe9840') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9a3dba26-f45a-46f3-93c0-018707a522b0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9a3dba26-f45a-46f3-93c0-018707a522b0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9a3dba26-f45a-46f3-93c0-018707a522b0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-9a3dba26-f45a-46f3-93c0-018707a522b0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ca369-6b39-4c4d-bfa1-7b1d5987eabf') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ca369-6b39-4c4d-bfa1-7b1d5987eabf') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ca369-6b39-4c4d-bfa1-7b1d5987eabf') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-ae1ca369-6b39-4c4d-bfa1-7b1d5987eabf') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Forecast using Neural Network by MAQ Software</strong> permite realizar predicciones a partir de series temporales usando un perceptrón multicapa (red neuronal artificial) con una única capa de neuronas.
A pesar de la complejidad que hay detrás de una red neuronal, la configuración de la visualización es muy sencilla:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_01.jpg"></a>
Apenas dos campos: uno para el eje X (<em>Series/Date</em>, con las fechas o una serie numérica) y otro, <em>Values</em>, con los valores numéricos de la serie a predecir.
En nuestro dataset tenemos datos relativos a la <a href="https://www.kaggle.com/rtatman/us-candy-production-by-month">producción de caramelos en los Estados Unidos</a> (dataset descargado de Kaggle). Este dataset consta de los mismos dos campos, que se han renombrado con los nombres <em>Date</em> y <em>Production</em>:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_02_0.jpg"></a>
Si llevamos estos dos campos a la visualización y filtramos las fechas en cuestión para incluir solo los años 2014 y posteriores (mediante una segmentación), el resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_03.jpg"></a>
Vemos cómo, a partir de los datos conocidos (producción entre 2014 y 2017) -datos mostrados en verde- la visualización realiza la predicción y la muestra en amarillo.
En <em>Formato > Forecast settings</em> podemos ver que la red neuronal se ha entrenado con parámetros por defecto y que la predicción es de 10 "<em>time lags</em>" (en este caso 10 meses, pues los datos de los que partimos son mensuales). Si modificamos esta última cifra para que la predicción sea de 24 meses, por ejemplo, la visualización mostrará el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/Forecast_using_nn_maq_04.jpg"></a>
En la misma sección del panel de formato podemos mostrar o no el intervalo de confianza, pudiendo escoger sus límites. Sin embargo, los valores representados por éstos se muestran absurdamente altos sea cual sea el intervalo de confianza escogido (o se trata de un error de programación o la confianza de la predicción es excesivamente baja).
Si configuramos la opción <em>Formato > Forecast settings > Parameter setting</em> con el valor <em>User defined</em> podemos configurar (hasta cierto punto) la red neuronal: el <em>decay</em> (tasa de aprendizaje o learning rate), el número de <em>epochs</em>, el máximo número de iteraciones (que, según la documentación de la visualización, representa el número de iteraciones de entrenamiento en cada epoch), y el número de neuronas artificiales.
La interpretación del campo <em>Max number of iterations</em> no es inmediata pues, en cada <em>epoch</em>, deberían pasar todos los datos de entrenamiento por la red. Tal vez con este parámetro estemos configurando el <em>batch size</em>, pero no queda claro.
En <em>Formato > Plot settings</em> podemos, entre otras cosas, configurar los colores a mostrar en la gráfica pero, en la práctica, los colores mostrados pocas veces tienen que ver con los escogidos.
Por último, podemos también dar cierto formato a los ejes X e Y (en las imágenes anteriores puede verse que la etiqueta del eje Y se muestra demasiado cerca de los valores de dicho eje, y esto no es solucionable configurando la visualización).
Comentar también que esta visualización requiere la instalación de ciertas librerías de R (instalación que se realiza de forma muy sencilla).
Buena visualización, aunque se agradecería la revisión de los problemas indicados.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e90bd069-2f89-460d-905d-47cc107fe1de') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e90bd069-2f89-460d-905d-47cc107fe1de') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e90bd069-2f89-460d-905d-47cc107fe1de') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-e90bd069-2f89-460d-905d-47cc107fe1de') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c42a1fe-dd94-4ec8-a9ec-dd0b516ee9ce') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c42a1fe-dd94-4ec8-a9ec-dd0b516ee9ce') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c42a1fe-dd94-4ec8-a9ec-dd0b516ee9ce') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-1c42a1fe-dd94-4ec8-a9ec-dd0b516ee9ce') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3c574e96-11ba-4351-a534-9cb25261c954') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3c574e96-11ba-4351-a534-9cb25261c954') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3c574e96-11ba-4351-a534-9cb25261c954') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3c574e96-11ba-4351-a534-9cb25261c954') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2221cdee-2320-4021-be40-6048cf437ba6') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2221cdee-2320-4021-be40-6048cf437ba6') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2221cdee-2320-4021-be40-6048cf437ba6') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-2221cdee-2320-4021-be40-6048cf437ba6') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('<strong>Ratings by MAQ Software</strong> nos permite mostrar ratings o valores mediante las clásicas estrellas o símbolos semejantes. Echemos un vistazo al panel de configuración:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_01.jpg"></a>
Aparte del campo <em>Tooltip</em>, común a la mayor parte de las visualizaciones de Power BI, solo tenemos dos campos adicionales: <em>Value</em>, a donde llevaremos el campo o medida conteniendo los valores que queremos representar, y <em>Maximum value</em>, que revisaremos en breve. Solo el campo <em>Value</em> es obligatorio. En nuestro modelo de datos los clientes nos han calificado y esta calificación se encuentra en el campo <em>Rating</em>, de forma que llevemos este campo a <em>Value</em> y configurémoslo para que la función de agregación aplicada sea el promedio. El resultado es el siguiente:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_02.jpg"></a>
Tal y como se indica en la minúscula etiqueta que se muestra debajo de las estrellas, el promedio del campo Rating es de 2.8 (sobre 5: en este caso el número de estrellas y el valor máximo del rating coinciden). Es posible modificar el número de estrellas a mostrar en <em>Formato > Indicator configuration > Number of indicators</em>. En la misma sección se puede configurar la forma a usar. Hay cuatro: estrellas, triángulos, triángulos invertidos y círculos. Es posible modificar los colores de las formas (colores lisos o un gradiente) y aplicarles o no un borde. En la siguiente imagen se ha replicado la misma visualización cuatro veces, con los cambios comentados:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_03.jpg"></a>
En el siguiente ejemplo se muestra una visualización con 10 estrellas y el gradiente (para el que es posible escoger el color inicial y el color final):
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/ratings__maq_04.jpg"></a>
El campo <em>Maximum value</em> básicamente fija el rating máximo (tal y como su etiqueta sugiere) y se muestra el rating medio tras "normalizarlo" con respecto a este valor (teniendo el cuenta el número de estrellas que tenga la visualización). Por ejemplo, si el rating medio que llevamos al campo <em>Value</em> es 2.78, el valor máximo que fijamos en el campo <em>Maximum value</em> es 4 y tenemos configurada la visualización para que muestre 5 estrellas, con independencia de cualquier otra cosa el número de estrellas a rellenar será 2.78 / 4 * 5 = 3.47 (en lugar del 2.78 que debería mostrarse). Si esto es útil o no, es discutible.
La (diminuta) etiqueta que muestra el valor numérico representado se puede ocultar. Además -afortunadamente- es posible aumentar su tamaño, así como escoger la posición en la que se muestra (encima, debajo, a la derecha o a la izquierda de las estrellas).
Y, aunque no se aprecie en las imágenes, la visualización tiene una bonita animación (que también podemos inhabilitar si lo deseamos).
Interesante visualización, bien desarrollada. Tal vez se agradecería que aceptase una variable categórica de forma que se mostrase el rating para todos sus valores en lugar de tener que crear una visualización para cada valor.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\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)