- 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', '96494bcb-fe75-421b-8f87-db56ee6f1d2b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '96494bcb-fe75-421b-8f87-db56ee6f1d2b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '96494bcb-fe75-421b-8f87-db56ee6f1d2b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '96494bcb-fe75-421b-8f87-db56ee6f1d2b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'df216c47-c8c0-41eb-ab0a-991917599a9d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'df216c47-c8c0-41eb-ab0a-991917599a9d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'df216c47-c8c0-41eb-ab0a-991917599a9d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'df216c47-c8c0-41eb-ab0a-991917599a9d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '3acd4fe9-c39b-4752-8526-ede313a7b2a0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '3acd4fe9-c39b-4752-8526-ede313a7b2a0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '3acd4fe9-c39b-4752-8526-ede313a7b2a0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '3acd4fe9-c39b-4752-8526-ede313a7b2a0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7b547472-d0c6-41d8-8711-3a5192760aee') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7b547472-d0c6-41d8-8711-3a5192760aee') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7b547472-d0c6-41d8-8711-3a5192760aee') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7b547472-d0c6-41d8-8711-3a5192760aee') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '390dbbbf-8984-403f-8733-8d3ee69b5dc7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '390dbbbf-8984-403f-8733-8d3ee69b5dc7') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '390dbbbf-8984-403f-8733-8d3ee69b5dc7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '390dbbbf-8984-403f-8733-8d3ee69b5dc7') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '79fc6517-49bf-471c-b440-a221ce20a369') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '79fc6517-49bf-471c-b440-a221ce20a369') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '79fc6517-49bf-471c-b440-a221ce20a369') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '79fc6517-49bf-471c-b440-a221ce20a369') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ed2d8e78-9985-4165-8118-f0824d06bd9b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ed2d8e78-9985-4165-8118-f0824d06bd9b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ed2d8e78-9985-4165-8118-f0824d06bd9b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ed2d8e78-9985-4165-8118-f0824d06bd9b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd918aa2a-faf7-41b9-9eab-c48896db8378') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd918aa2a-faf7-41b9-9eab-c48896db8378') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd918aa2a-faf7-41b9-9eab-c48896db8378') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'd918aa2a-faf7-41b9-9eab-c48896db8378') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:
El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).
La resolución de este escenario incluye dos pasos:
1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:
2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.
1er paso
Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:
SUMMARIZE
El código sería el siguiente:
Max value per category summarize =
SUMMARIZE(
Data;
Data[Category];
"Max value"; MAX(Data[Value])
)
Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:
SUMMARIZECOLUMNS
En este segundo caso el código sería el siguiente:
Max value per category summarizecolumns =
SUMMARIZECOLUMNS(
Data[Category];
"Max value";
MAX(Data[Value])
)
Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.
GROUPBY
Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:
Max value per category groupby =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>.
2º paso
Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:
SUMMARIZE
El código para esta primera función sería el siguiente:
Sum of max value per category =
SUMMARIZE(
'Max value per category groupby';
"Max"; SUM('Max value per category groupby'[Max value])
)
Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:
Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.
Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")
SUMMARIZECOLUMNS
Con esta función, el código sería el siguiente:
Sum of max value per category =
SUMMARIZECOLUMNS(
"Max"; SUM('Max value per category groupby'[Max value])
)
Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:
Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.
GROUPBY
En este último caso, el código sería el siguiente:
Sum of max value per category =
VAR Max_value_per_category =
GROUPBY(
Data;
Data[Category];
"Max value"; MAXX(CURRENTGROUP(); Data[Value])
)
RETURN
GROUPBY(
Max_value_per_category;
"Sum"; SUMX(CURRENTGROUP(); [Max value])
)
Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:
En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_43dffa6ad507293d1ceeb24e05ce942c->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/views-view-unformatted.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view_unformatted', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 110)
__TwigTemplate_349d2f5aada73507d566397721f27ea4->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/views/views-view.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('views_view', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\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)