{"id":1655,"date":"2023-07-20T08:00:00","date_gmt":"2023-07-20T06:00:00","guid":{"rendered":"https:\/\/bicontrolling.com\/?p=1655"},"modified":"2023-09-11T10:34:28","modified_gmt":"2023-09-11T08:34:28","slug":"las-funciones-all-como-modificadores-de-calculate","status":"publish","type":"post","link":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/","title":{"rendered":"Las funciones ALL* como modificadores de CALCULATE"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">INTRODUCCI\u00d3N<\/h3>\n\n\n\n<p>La funci\u00f3n <code>ALL<\/code> (y sus compa\u00f1eras de familia: <code>ALLEXCEPT<\/code>, <code>ALLNOBLANKROW<\/code>, <code>ALLCROSSFILTERED<\/code> y <code>ALLSELECTED<\/code>) son unas <strong>de las funciones tabulares de DAX m\u00e1s utilizadas<\/strong>, principalmente con el prop\u00f3sito de expandir el n\u00famero de registros a considerar en la realizaci\u00f3n de un determinado c\u00e1lculo, eliminando filtros que se encuentran activos en el contexto actual.<\/p>\n\n\n\n<p>Como funci\u00f3n tabular, <code>ALL<\/code> devuelve todas las filas de una tabla o todos los valores \u00fanicos de una o m\u00e1s columnas dependiendo del par\u00e1metro utilizado.<\/p>\n\n\n\n<p>Cuando usamos una de estas funciones como la funci\u00f3n de primer nivel en un argumento de filtro de <code>CALCULATE<\/code>, <strong>su comportamiento cambia y en lugar de funcionar como una funci\u00f3n de tabla act\u00faa como un modificador de <code>CALCULATE<\/code>, eliminando un filtro existente en el contexto en lugar de crear uno nuevo.<\/strong> <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Es por ello que, en el lenguaje DAX existe actualmente otra funci\u00f3n denominada <code>REMOVEFILTERS<\/code>, que es simplemente un alias para <code>ALL<\/code>, pero que solo puede usarse como modificador de <code>CALCULATE<\/code> y no como funci\u00f3n tabular.<\/p>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">LOS MODIFICADORES DE CALCULATE<\/h3>\n\n\n\n<p>A parte de entender como <code>CALCULATE<\/code> crea un nuevo contexto a partir de sus argumentos de filtro y de la transici\u00f3n de contexto que se produce cuando existen uno o varios contextos de fila activos en el momento de invocar dicha funci\u00f3n, es importante entender tambi\u00e9n el concepto de modificador de <code>CALCULATE<\/code>, para tener claro el <strong>conjunto de reglas que rigen el comportamiento y el orden de ejecuci\u00f3n del algoritmo que <code>CALCULATE<\/code> realiza.  <\/strong><\/p>\n\n\n\n<p>Estos modificadores corresponden a funciones que, utilizadas como par\u00e1metros de filtro de <code>CALCULATE<\/code>, no van a introducir filtros en el nuevo contexto, sino que <strong>van a determinar c\u00f3mo los argumentos de filtro se van a fusionar con el contexto original<\/strong>, es decir, influyen en la preparaci\u00f3n del nuevo contexto de filtro bajo el cual se va a evaluar el par\u00e1metro de expresi\u00f3n de <code>CALCULATE<\/code>.<\/p>\n\n\n\n<p>Algunos de estos modificadores son <code>USERELATIONSHIP<\/code>,&nbsp;<code>CROSSFILTER<\/code> y <code>KEEPFILTERS<\/code>, siendo esta \u00faltima funci\u00f3n en realidad un modificador de un argumento de filtro y no un modificador de <code>CALCULATE<\/code> como tal, <strong>ya que <code>KEEPFILTERS<\/code> solo cambia la forma en la que un filtro se fusiona con el contexto original.<\/strong><\/p>\n\n\n\n<p>Como venimos diciendo, las funciones <code>ALL*<\/code>, cuando se usan como argumentos de filtro de <code>CALCULATE<\/code>, act\u00faan como modificadores de <code>CALCULATE<\/code>. Por lo tanto, <strong>estas funciones eliminan un filtro existente en lugar de crear uno nuevo en el contexto.<\/strong><\/p>\n\n\n\n<p>La diferencia entre los dos comportamientos, a\u00f1adir o quitar filtros, no es relevante en muchos escenarios. Sin embargo, hay situaciones en las que esta diferencia tiene un impacto importante y puede llevarnos a resultados err\u00f3neos.<\/p>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">USANDO LAS FUNCIONES ALL* COMO MODIFICADORES DE CALCULATE<\/h3>\n\n\n\n<p>Para ver con claridad la diferencia que existe entre usar las funciones de la familia <code>ALL*<\/code> como funciones tabulares y usarlas como modificadores de <code>CALCULATE<\/code>, vamos a utilizar varios ejemplos.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ejemplo con la funci\u00f3n ALL<\/h4>\n\n\n\n<p>Comencemos creando dos medidas, una de ellas contar\u00e1 el n\u00famero de clientes con distinto nombre en nuestra dimensi\u00f3n de Clientes, y la otra har\u00e1 lo mismo, pero<strong> solamente teniendo en cuenta aquellos clientes que efectivamente hayan realizado alguna compra<\/strong> y, por tanto, que tengan registros asociados en la tabla de hechos de Ventas. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:15.400002002716064px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Clientes =\nDISTINCTCOUNT ( Customer[Name] )\n\n----\n\n# ClientesVendidos =\nCALCULATE (\n    [# Clientes],\n    Sales\n)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\"># <\/span><span style=\"color: #4FC1FF\">Clientes<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">DISTINCTCOUNT<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Customer<\/span><span style=\"color: #DCDCAA\">[Name]<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"># <\/span><span style=\"color: #4FC1FF\">ClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">Sales<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Para entender esta segunda medida hay que considerar que la tabla que estamos usando como argumento de filtro de CALCULATE, la tabla Ventas, <strong>se refiere en realidad a la versi\u00f3n expandida de la misma<\/strong> y, por tanto, contiene todas las columnas de Ventas, pero tambi\u00e9n todas las columnas de las tablas que se encuentran en el lado 1 de una relaci\u00f3n con esta. Como nuestro modelo solo contiene una tabla de hechos, la tabla Ventas, su versi\u00f3n expandida contiene en realidad todo el modelo de datos. <\/p>\n\n\n\n<p>Es por esto que, aunque estemos contando los valores de una columna de la dimensi\u00f3n Cliente, el resultado corresponde al n\u00famero de clientes que han realizado alguna compra. Dado que utilizamos la tabla de hechos como argumento de filtro de CALCULATE, el contexto de filtro final sobre el que se evaluar\u00e1 el par\u00e1metro de expresi\u00f3n<strong> contiene todas las columnas de la dimensi\u00f3n Cliente, ya que dicha dimensi\u00f3n se encuentra en el lado 1 de una relaci\u00f3n con Ventas.<\/strong><\/p>\n\n\n\n<p>Podemos ver el resultado de ambas medidas en la siguiente consulta:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"340\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/DAX-Studio-Consulta.png?resize=629%2C340&#038;ssl=1\" alt=\"\" class=\"wp-image-2022\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/DAX-Studio-Consulta.png?w=708&amp;ssl=1 708w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/DAX-Studio-Consulta.png?resize=300%2C162&amp;ssl=1 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Ahora vamos a introducir en el contexto de filtro alg\u00fan atributo de la dimensi\u00f3n Cliente, por ejemplo el Pa\u00eds, y nuestras dos medidas se representar\u00e1n de la siguiente manera:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"490\" height=\"334\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ClientesyClientesVendidos.png?resize=490%2C334&#038;ssl=1\" alt=\"\" class=\"wp-image-2023\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ClientesyClientesVendidos.png?w=490&amp;ssl=1 490w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ClientesyClientesVendidos.png?resize=300%2C204&amp;ssl=1 300w\" sizes=\"auto, (max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Supongamos que existe el requisito de calcular el % del valor en el contexto sobre el total para ambas medidas, es decir,<strong> el % de clientes de cada pa\u00eds frente al total de todos los pa\u00edses.<\/strong> Podemos pensar en crear estas dos medidas de la siguiente manera:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:15.39999771118164px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"% Clientes =\nVAR _NumClientes = [# Clientes]\nVAR _TodosLosClientes =\n    CALCULATE (\n        [# Clientes],\n        ALL ( Sales )\n    )\nVAR _Rdo =\n    DIVIDE (\n        _NumClientes,\n        _TodosLosClientes\n    )\nRETURN\n    _Rdo\n    \n----\n\n% ClientesVendidos =\nVAR _NumClientesVendidos =\n    CALCULATE (\n        [# Clientes],\n        Sales\n    )\nVAR _TodosLosClientesVendidos =\n    CALCULATE (\n        [# Clientes],\n        ALL ( Sales )\n    )\nVAR _Rdo =\n    DIVIDE (\n        _NumClientesVendidos,\n        _TodosLosClientesVendidos\n    )\nRETURN\n    _Rdo\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">% <\/span><span style=\"color: #4FC1FF\">Clientes<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_NumClientes<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_TodosLosClientes<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">ALL<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Sales<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">DIVIDE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_NumClientes<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_TodosLosClientes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">RETURN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">----<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">% <\/span><span style=\"color: #4FC1FF\">ClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_NumClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">Sales<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_TodosLosClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">ALL<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Sales<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">DIVIDE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_NumClientesVendidos<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_TodosLosClientesVendidos<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">RETURN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Si observamos el resultado y realizamos los c\u00e1lculos, veremos que la medida <code>% ClientesVendidos<\/code> nos devuelve un resultado err\u00f3neo, que podemos identificar f\u00e1cilmente al ver que el total no corresponde al 100%:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"251\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorClientesVendidosPct.png?resize=629%2C251&#038;ssl=1\" alt=\"\" class=\"wp-image-2026\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorClientesVendidosPct.png?w=825&amp;ssl=1 825w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorClientesVendidosPct.png?resize=300%2C120&amp;ssl=1 300w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorClientesVendidosPct.png?resize=768%2C306&amp;ssl=1 768w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>El motivo de este comportamiento lo podemos encontrar en el c\u00e1lculo del denominador de la medida incorrecta:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:7.6999993324279785px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"VAR _TodosLosClientesVendidos =\nCALCULATE(\n        [# Clientes],\n        ALL(Sales)\n)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_TodosLosClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">ALL<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4FC1FF\">Sales<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Estamos utilizando <code>ALL<\/code> como la funci\u00f3n de primer nivel en un par\u00e1metro de filtro de <code>CALCULATE<\/code> y, por lo tanto, <code>ALL<\/code> no se comporta como funci\u00f3n tabular sino como modificador de <code>CALCULATE<\/code>, y su prop\u00f3sito es el de eliminar filtros del contexto, no el de devolver una tabla como resultado. En el caso de este ejemplo, <code>ALL<\/code> <strong>est\u00e1 eliminando cualquier filtro que provenga de la versi\u00f3n expandida de Sales que incluye la columna presente en el contexto original, <code>Customer[Country]<\/code>.<\/strong><\/p>\n\n\n\n<p>Por esta raz\u00f3n, en el denominador estamos calculando el n\u00famero total de clientes, que es de 16.258, no el de los clientes que han efectuado alguna compra, que es de 13.992.<\/p>\n\n\n\n<p>Llegados a este punto, entendemos porque es preferible, en el caso de usar <code>ALL<\/code> como modificador de <code>CALCULATE<\/code>, utilizar la funci\u00f3n <code>REMOVEFILTERS<\/code>, de manera que identifiquemos r\u00e1pidamente el papel que juega un par\u00e1metro de filtro en una f\u00f3rmula.<\/p>\n\n\n\n<p>\u00bfY c\u00f3mo arreglamos el denominador de la medida <code>% ClientesVendidos<\/code> para obtener el resultado correcto? La respuesta consiste en no utilizar ALL como funci\u00f3n de primer nivel en un par\u00e1metro de filtro. Existen varias maneras de <strong>cambiar la sem\u00e1ntica de la f\u00f3rmula y forzar, de forma expl\u00edcita, la devoluci\u00f3n por parte de <code>ALL(Sales)<\/code> de una tabla. <\/strong>Una de ellas consiste en utilizar <code>CALCULATETABLE<\/code> en el denominador de nuestra f\u00f3rmula de la siguiente forma:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:15.39999771118164px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"% ClientesVendidos =\nVAR _NumClientesVendidos =\n    CALCULATE (\n        [# Clientes],\n        Sales\n    )\nVAR _TodosLosClientesVendidos =\n    CALCULATE (\n        [# Clientes],\n        CALCULATETABLE (\n            ALL ( Sales )\n        )\n    )\nVAR _Rdo =\n    DIVIDE (\n        _NumClientesVendidos,\n        _TodosLosClientesVendidos\n    )\nRETURN\n    _Rdo\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">% <\/span><span style=\"color: #4FC1FF\">ClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_NumClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">Sales<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_TodosLosClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">CALCULATETABLE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">ALL<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Sales<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">DIVIDE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_NumClientesVendidos<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_TodosLosClientesVendidos<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">RETURN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>De esta forma, estaremos calculando en el denominador de la m\u00e9trica el n\u00famero de clientes que efectivamente han realizado compras, y lograremos el resultado correcto:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"252\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/CorrectoConCALCULATETABLE.png?resize=629%2C252&#038;ssl=1\" alt=\"\" class=\"wp-image-2027\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/CorrectoConCALCULATETABLE.png?w=843&amp;ssl=1 843w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/CorrectoConCALCULATETABLE.png?resize=300%2C120&amp;ssl=1 300w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/CorrectoConCALCULATETABLE.png?resize=768%2C308&amp;ssl=1 768w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Cabe resaltar, antes de dar por terminado este ejemplo, que en este \u00faltimo caso <code>ALL<\/code> se comporta como funci\u00f3n tabular y no como modificador, al no ser la funci\u00f3n de primer nivel del par\u00e1metro de filtro. De hecho, <strong>si intent\u00e1ramos sustituir <code>ALL<\/code> por <code>REMOVEFILTERS<\/code><\/strong>, quedando la variable del denominador de la siguiente forma:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:7.6999993324279785px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"VAR _TodosLosClientesVendidos =\nCALCULATE (\n    [# Clientes],\n    CALCULATETABLE (\n        REMOVEFILTERS ( Sales )\n    )\n)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_TodosLosClientesVendidos<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">[# Clientes]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATETABLE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">REMOVEFILTERS<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Sales<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Obtendr\u00edamos el siguiente error:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"177\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorREMOVEFILTERS.png?resize=629%2C177&#038;ssl=1\" alt=\"\" class=\"wp-image-2031\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorREMOVEFILTERS.png?w=817&amp;ssl=1 817w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorREMOVEFILTERS.png?resize=300%2C84&amp;ssl=1 300w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/ErrorREMOVEFILTERS.png?resize=768%2C216&amp;ssl=1 768w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Ejemplo con la funci\u00f3n ALLEXCEPT<\/h4>\n\n\n\n<p>Veamos otro ejemplo en el que podemos observar nuevamente el comportamiento de las funciones de la familia <code>ALL*<\/code> descrito a lo largo del art\u00edculo. Esta vez <strong>con una de las hermanas de <code>ALL<\/code>, la funci\u00f3n <code>ALLEXCEPT<\/code><\/strong> que, como venimos comentando, cuando se usa como funci\u00f3n de primer nivel en un argumento de filtro de <code>CALCULATE<\/code> tambi\u00e9n act\u00faa como un modificador de dicha funci\u00f3n y no como funci\u00f3n tabular.<\/p>\n\n\n\n<p>Imaginemos que disponemos del siguiente informe en el que podemos ver las Ventas segmentadas por categor\u00eda y subcategor\u00eda de producto:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"650\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Image-3-2.png?resize=615%2C650&#038;ssl=1\" alt=\"\" class=\"wp-image-1998\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Image-3-2.png?w=615&amp;ssl=1 615w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Image-3-2.png?resize=284%2C300&amp;ssl=1 284w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Y lo que buscamos es crear una medida que nos indique<strong> el % de ventas de cada subcategor\u00eda sobre el total de su categor\u00eda correspondiente<\/strong>. Para ello, vamos a crear una medida que, en el denominador, elimine el filtro sobre la Subcategor\u00eda:<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:15.39999771118164px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"PctOverCategory =\nVAR _Ventas = [Ventas]\nVAR _VentasCategoria =\n    CALCULATE (\n        [Ventas],\n        REMOVEFILTERS ( 'Product'[Subcategory] )\n    )\nVAR _Rdo =\n    DIVIDE (\n        _Ventas,\n        _VentasCategoria\n    )\nRETURN\n    _Rdo\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">PctOverCategory<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Ventas<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_VentasCategoria<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">REMOVEFILTERS<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4EC9B0\">&#39;Product&#39;<\/span><span style=\"color: #DCDCAA\">[Subcategory]<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">DIVIDE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_Ventas<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_VentasCategoria<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">RETURN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>El resultado obtenido es el esperado:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"558\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/PctOverCategory.png?resize=629%2C558&#038;ssl=1\" alt=\"\" class=\"wp-image-1997\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/PctOverCategory.png?w=735&amp;ssl=1 735w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/PctOverCategory.png?resize=300%2C266&amp;ssl=1 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aunque la medida propuesta funciona en el escenario actual, dejar\u00eda de hacerlo <strong>si, por ejemplo, el usuario sustituye en las filas de la matriz la subcategor\u00eda por otro atributo dimensional<\/strong>, pongamos, por ejemplo, el color del producto:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"600\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/PorColor.png?resize=629%2C600&#038;ssl=1\" alt=\"\" class=\"wp-image-1999\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/PorColor.png?w=673&amp;ssl=1 673w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/PorColor.png?resize=300%2C286&amp;ssl=1 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>La raz\u00f3n por la que nuestra medida no funciona es porque <strong>estamos eliminando el filtro de la Subcategor\u00eda, pero no el del Color<\/strong>, por lo que estar\u00edamos dividiendo el valor de las Ventas de cada Subcategor\u00eda y Color por el mismo importe, obteniendo siempre como resultado un 100%.<\/p>\n\n\n\n<p>Llegados a este punto, podemos pensar que, con el objetivo de proporcionar una soluci\u00f3n m\u00e1s robusta resultar\u00eda mejor opci\u00f3n <strong>eliminar el filtro de cualquier columna de la tabla de Producto, excepto el de la Categor\u00eda <\/strong>para que, independientemente de la columna que el usuario introduzca como segundo nivel de segmentaci\u00f3n en las filas de la matriz, su filtro se elimine en el denominador de nuestro c\u00e1lculo. Para llevar esto a cabo podemos probar con la funci\u00f3n <code>ALLEXCEPT<\/code>, que como se ejecuta dentro de <code>CALCULATE<\/code>, actuar\u00eda como un modificador y no como una funci\u00f3n tabular. El c\u00f3digo ser\u00eda el siguiente:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:15.39999771118164px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"PctOverCategory =\nVAR _Ventas = [Ventas]\nVAR _VentasCategoria =\n    CALCULATE (\n        [Ventas],\n        ALLEXCEPT (\n            'Product',\n            'Product'[Category]\n        )\n    )\nVAR _Rdo =\n    DIVIDE (\n        _Ventas,\n        _VentasCategoria\n    )\nRETURN\n    _Rdo\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">PctOverCategory<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Ventas<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_VentasCategoria<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">ALLEXCEPT<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #4EC9B0\">&#39;Product&#39;<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #4EC9B0\">&#39;Product&#39;<\/span><span style=\"color: #DCDCAA\">[Category]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">DIVIDE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_Ventas<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_VentasCategoria<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">RETURN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Veamos el resultado obtenido con esta \u00faltima formula:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"587\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Con-ALLEXCEPT.png?resize=629%2C587&#038;ssl=1\" alt=\"\" class=\"wp-image-2000\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Con-ALLEXCEPT.png?w=700&amp;ssl=1 700w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Con-ALLEXCEPT.png?resize=300%2C280&amp;ssl=1 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Como podemos observar, el resultado vuelve a ser el correcto, y lo seguir\u00eda siendo, <strong>aunque sustituy\u00e9ramos la columna Color por otro atributo de la dimensi\u00f3n producto<\/strong> que no fuera la Categor\u00eda, cuyo filtro es el \u00fanico que mantenemos en el denominador del c\u00e1lculo.<\/p>\n\n\n\n<p>Para probar el nivel de robustez de nuestra m\u00e9trica, <strong>volvamos a introducir en el contexto la Subcategor\u00eda<\/strong> y eliminemos de la visualizaci\u00f3n la Categor\u00eda, y veamos si el resultado sigue siendo correcto, es decir, nos sigue devolviendo el % de las Ventas de la Subcategor\u00eda presente en el contexto sobre el total de la Categor\u00eda a la que pertenece:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"634\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Eliminado-Categoria-del-Contexto-de-filtro.png?resize=629%2C634&#038;ssl=1\" alt=\"\" class=\"wp-image-2003\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Eliminado-Categoria-del-Contexto-de-filtro.png?w=665&amp;ssl=1 665w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Eliminado-Categoria-del-Contexto-de-filtro.png?resize=298%2C300&amp;ssl=1 298w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Eliminado-Categoria-del-Contexto-de-filtro.png?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Eliminado-Categoria-del-Contexto-de-filtro.png?resize=88%2C88&amp;ssl=1 88w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Si nos detenemos a observar el resultado, veremos que la medida no est\u00e1 dividiendo las ventas de cada Subcategor\u00eda por las del total de su Categor\u00eda correspondiente, sino que est\u00e1 dividiendo<strong> sobre el total de las Ventas de todas las Categor\u00edas de producto presentes en nuestro modelo. <\/strong><\/p>\n\n\n\n<p>La raz\u00f3n por la cual nuestra f\u00f3rmula no se comporta de la manera esperada es la misma que la del ejemplo anterior y la raz\u00f3n de este art\u00edculo. Cuando utilizamos <code>CALCULATE<\/code> en DAX, estamos creando un nuevo contexto de filtro basado en el contexto original. En nuestro denominador: <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:7.6875px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CALCULATE (\n        [Ventas],\n        ALLEXCEPT (\n            'Product',\n            'Product'[Category]\n        )\n    )\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">ALLEXCEPT<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #4EC9B0\">&#39;Product&#39;<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #4EC9B0\">&#39;Product&#39;<\/span><span style=\"color: #DCDCAA\">[Category]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Inicialmente <code>CALCULATE<\/code> hace una copia del contexto de filtro original y, posteriormente, <code>ALLEXCEPT<\/code> elimina cualquier filtro que provenga de la tabla de producto, excepto el de la columna Categor\u00eda. Como en este caso, <code>ALLEXCEPT<\/code> act\u00faa como un modificador de <code>CALCULATE<\/code>  y no como una funci\u00f3n tabular, <strong>la \u00fanica acci\u00f3n que puede realizar es la de eliminar filtros del contexto original, pero no puede introducir ni mantener ning\u00fan filtro activo,<\/strong> porque no devuelve ninguna tabla, al contrario que cuando usamos las funciones <code>ALL*<\/code> como funciones tabulares. Es por esto que nuestra f\u00f3rmula solo funciona en el caso de que en el contexto original exista un filtro en la columna Categor\u00eda, ya que <code>ALLEXCEPT<\/code> no puede, de ninguna manera, introducir un filtro en el contexto.<\/p>\n\n\n\n<p>Para que nuestra f\u00f3rmula funcione de la manera que estamos buscando, debemos asegurarnos de introducir un filtro (o mantenerlo, en el caso de que ya exista) en el contexto, y debemos hacerlo de forma proactiva, ya que, como hemos visto, no podemos fiarnos de <code>ALLEXCEPT<\/code> para esta finalidad. <strong>Lo que necesitamos es utilizar como par\u00e1metro de filtro de <code>CALCULATE<\/code> una funci\u00f3n tabular que nos devuelva los valores de la columna Categor\u00eda que se encuentren visibles en el contexto de filtro actual. <\/strong>La funci\u00f3n que puede ayudarnos para tal fin es <code>VALUES<\/code>. En el caso de que quisi\u00e9ramos introducir (o mantener) el filtro en m\u00e1s de una columna de la dimensi\u00f3n producto utilizar\u00edamos la funci\u00f3n <code>SUMMARIZE<\/code>. Por consiguiente, nuestra f\u00f3rmula quedar\u00eda de la siguiente manera:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:15.39999771118164px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"PctOverCategory =\nVAR _Ventas = [Ventas]\nVAR _VentasCategoria =\n    CALCULATE (\n        [Ventas],\n        ALL ( 'Product' ),\n        VALUES ( Product[Category] )\n    )\nVAR _Rdo =\n    DIVIDE (\n        _Ventas,\n        _VentasCategoria\n    )\nRETURN\n    _Rdo\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">PctOverCategory<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Ventas<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_VentasCategoria<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">ALL<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4EC9B0\">&#39;Product&#39;<\/span><span style=\"color: #D4D4D4\"> ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">VALUES<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Product<\/span><span style=\"color: #DCDCAA\">[Category]<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">VAR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">DIVIDE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_Ventas<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">_VentasCategoria<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">RETURN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">_Rdo<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Es por este motivo por lo que, cuando queremos eliminar todos los filtros de una tabla salvo el de alguna\/s columna\/s, <strong>se considera buena pr\u00e1ctica y se recomienda siempre utilizar la t\u00e9cnica de <code>ALL<\/code> (o <code>REMOVEFILTERS<\/code>) y <code>VALUES<\/code> y no la de <code>ALLEXCEPT<\/code>,<\/strong> que la dejaremos para escenarios m\u00e1s complejos, como el de evitar referencias circulares en columnas calculadas mediante la <strong>eliminaci\u00f3n de la dependencia de ciertas columnas en la transici\u00f3n de contexto producida cuando utilizamos <code>CALCULATE<\/code> en un contexto de fila.<\/strong><\/p>\n\n\n\n<p>Volviendo a nuestro ejemplo, podemos verificar que esta \u00faltima f\u00f3rmula se comporta de manera correcta independientemente de que dispongamos o no en el contexto original, de un filtro en la Categor\u00eda:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"623\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Con-REMOVEFILTERS-y-VALUES.png?resize=629%2C623&#038;ssl=1\" alt=\"\" class=\"wp-image-2004\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Con-REMOVEFILTERS-y-VALUES.png?w=685&amp;ssl=1 685w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Con-REMOVEFILTERS-y-VALUES.png?resize=300%2C297&amp;ssl=1 300w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/Con-REMOVEFILTERS-y-VALUES.png?resize=88%2C88&amp;ssl=1 88w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Ejemplo con ALL y KEEPFILTERS<\/h4>\n\n\n\n<p>Por \u00faltimo, planteemos otro ejemplo en el que podremos ver la principal caracter\u00edstica de los modificadores de <code>CALCULATE<\/code> en acci\u00f3n, que corresponde al hecho de que <strong>siempre se van a aplicar antes que los argumentos de filtro expl\u00edcitos.<\/strong><\/p>\n\n\n\n<p>Tenemos dos medidas que en principio deber\u00edan darnos resultados distintos. La primera ser\u00eda la siguiente:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:7.700000762939453px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"VentasFrance =\nCALCULATE (\n    [Ventas],\n    Customer[Country] = &quot;France&quot;\n)\n\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">VentasFrance<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">Customer<\/span><span style=\"color: #DCDCAA\">[Country]<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;France&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Que, como sabemos, es lo mismo que:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:7.700000762939453px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"VentasFrance =\nCALCULATE (\n    [Ventas],\n    FILTER (\n        ALL ( Customer[Country] ),\n        Customer[Country] = &quot;France&quot;\n    )\n)\n\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">VentasFrance<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">FILTER<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">ALL<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Customer<\/span><span style=\"color: #DCDCAA\">[Country]<\/span><span style=\"color: #D4D4D4\"> ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4FC1FF\">Customer<\/span><span style=\"color: #DCDCAA\">[Country]<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;France&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Esta medida elimina cualquier filtro del contexto original aplicado en la columna <code>Customer[Country]<\/code>, y lo sustituye por uno en dicha columna con el valor \u00abFrance\u00bb. Por lo tanto, siempre nos dar\u00eda el mismo resultado, <strong>independientemente del Pa\u00eds seleccionado en el contexto original:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"420\" height=\"301\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/2023-08-02-13-33-44-1.png?resize=420%2C301&#038;ssl=1\" alt=\"\" class=\"wp-image-2038\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/2023-08-02-13-33-44-1.png?w=420&amp;ssl=1 420w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/2023-08-02-13-33-44-1.png?resize=300%2C215&amp;ssl=1 300w\" sizes=\"auto, (max-width: 420px) 100vw, 420px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>La segunda de las medidas es esta:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:7.6999993324279785px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"VentasFranciaKF =\nCALCULATE (\n    [Ventas],\n    KEEPFILTERS ( Customer[Country] = &quot;France&quot; ),\n    ALL ( Customer[Country] )\n)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">VentasFranciaKF<\/span><span style=\"color: #D4D4D4\"> =<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">CALCULATE<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">[Ventas]<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">KEEPFILTERS<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Customer<\/span><span style=\"color: #DCDCAA\">[Country]<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;France&quot;<\/span><span style=\"color: #D4D4D4\"> ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">ALL<\/span><span style=\"color: #D4D4D4\"> ( <\/span><span style=\"color: #4FC1FF\">Customer<\/span><span style=\"color: #DCDCAA\">[Country]<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">)<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">DAX<\/span><\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Parece intuitivo pensar que, por la presencia de <code>KEEPFILTERS<\/code>, esta medida nos devuelva el valor de las Ventas de Francia solamente en el caso de que dicho valor se encuentre en el contexto original. Por el contrario, esta medida arroja el mismo resultado que la anterior. <strong>La raz\u00f3n es que <code>ALL<\/code> act\u00faa como un modificador de <code>CALCULATE<\/code> y, por lo tanto, se aplica antes que el filtro explicito rodeado por <code>KEEPFILTERS<\/code>. <\/strong>Una vez <code>ALL<\/code> elimina el filtro en la columna <code>Customer[Country]<\/code> del contexto original, <code>KEEPFILTERS<\/code> no dispone de la posibilidad de mantener ning\u00fan filtro en dicha columna, ya que no existe ninguno. Como podemos observar, ambas medidas producen el mismo resultado:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"561\" height=\"290\" src=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/MismoResultadoConKEEPFILTERS.png?resize=561%2C290&#038;ssl=1\" alt=\"\" class=\"wp-image-2039\" srcset=\"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/MismoResultadoConKEEPFILTERS.png?w=561&amp;ssl=1 561w, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/MismoResultadoConKEEPFILTERS.png?resize=300%2C155&amp;ssl=1 300w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/figure>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">CONCLUSI\u00d3N<\/h3>\n\n\n\n<p>Las funciones de la familia <code>ALL*<\/code> pueden actuar <strong>como funciones tabulares o como modificadores de <code>CALCULATE<\/code>. <\/strong>La diferencia sem\u00e1ntica entre ambos comportamientos es sutil. En la mayor\u00eda de casos esta diferencia pasar\u00e1 inadvertida. Sin embargo, existen ocasiones en las que esta distinci\u00f3n en el comportamiento de <code>ALL<\/code> cambiar\u00e1 por completo el resultado de una f\u00f3rmula. Conviene por tanto comprender profundamente las implicaciones de ambos comportamientos para evitar resultados en nuestros informes que puedan llevar al usuario a conclusiones err\u00f3neas.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n<blockquote>\n<p><span style=\"color: #808080;\">Todo el c\u00f3digo DAX de este art\u00edculo ha sido formateado con<em> \u00abDAX Formatter\u00bb <\/em><\/span><br><a href=\"http:\/\/www.daxformatter.com?utm_source=badge-dark&amp;utm_medium=ad&amp;utm_campaign=embed\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.daxformatter.com\/wp-content\/themes\/daxformatter\/images\/daxformatter-badge-small-dark.png?w=629\" alt=\"DAX Formatter by SQLBI\"><\/a><\/p>\n<\/blockquote>\n<div>&nbsp;<\/div>\n<div>&nbsp;<\/div>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE.<br \/>\nEn estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones<br \/>\nque conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza<br \/>\nla funci\u00f3n CALCULATE.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2,4],"tags":[27,9,11,14,23],"post_series":[],"class_list":["post-1655","post","type-post","status-publish","format-standard","hentry","category-arquitectura-de-datos","category-dax-power-pivot","tag-bi","tag-dax","tag-inteligencia-de-negocios","tag-power-bi","tag-power-pivot"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza la funci\u00f3n CALCULATE.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Admin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Business Intelligence Controlling | La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling\" \/>\n\t\t<meta property=\"og:description\" content=\"En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza la funci\u00f3n CALCULATE.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2023-07-20T06:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2023-09-11T08:34:28+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza la funci\u00f3n CALCULATE.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#article\",\"name\":\"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling\",\"headline\":\"Las funciones ALL* como modificadores de CALCULATE\",\"author\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/vlozanoluque_sg8t8mat\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/bicontrolling.com\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/DAX-Studio-Consulta.png?fit=708%2C383&ssl=1\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#articleImage\",\"width\":708,\"height\":383},\"datePublished\":\"2023-07-20T08:00:00+02:00\",\"dateModified\":\"2023-09-11T10:34:28+02:00\",\"inLanguage\":\"es-ES\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#webpage\"},\"articleSection\":\"Arquitectura de datos, DAX, BI, DAX, Inteligencia de negocios, Power BI, Power Pivot\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#listItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\\\/\\\/bicontrolling.com\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/#listItem\",\"name\":\"Arquitectura de datos\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/#listItem\",\"position\":2,\"name\":\"Arquitectura de datos\",\"item\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#listItem\",\"name\":\"Las funciones ALL* como modificadores de CALCULATE\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#listItem\",\"name\":\"Inicio\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#listItem\",\"position\":3,\"name\":\"Las funciones ALL* como modificadores de CALCULATE\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/category\\\/arquitectura-de-datos\\\/#listItem\",\"name\":\"Arquitectura de datos\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#organization\",\"name\":\"Business Intelligence Controlling\",\"description\":\"La nueva generaci\\u00f3n del reporting econ\\u00f3mico-financiero y el control de gesti\\u00f3n empresarial\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/vlozanoluque_sg8t8mat\\\/#author\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/vlozanoluque_sg8t8mat\\\/\",\"name\":\"Admin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/00c17f691e05a0999c7ea23a9ae4aa6e7ae25f55cd91ae9629fe81a02ae98278?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Admin\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#webpage\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/\",\"name\":\"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling\",\"description\":\"En este art\\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\\u00ed como su relaci\\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\\u00f3n del algoritmo que realiza la funci\\u00f3n CALCULATE.\",\"inLanguage\":\"es-ES\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/2023\\\/07\\\/20\\\/las-funciones-all-como-modificadores-de-calculate\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/vlozanoluque_sg8t8mat\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/index.php\\\/author\\\/vlozanoluque_sg8t8mat\\\/#author\"},\"datePublished\":\"2023-07-20T08:00:00+02:00\",\"dateModified\":\"2023-09-11T10:34:28+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#website\",\"url\":\"https:\\\/\\\/bicontrolling.com\\\/\",\"name\":\"Business Intelligence Controlling\",\"description\":\"La nueva generaci\\u00f3n del reporting econ\\u00f3mico-financiero y el control de gesti\\u00f3n empresarial\",\"inLanguage\":\"es-ES\",\"publisher\":{\"@id\":\"https:\\\/\\\/bicontrolling.com\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling","description":"En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza la funci\u00f3n CALCULATE.","canonical_url":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#article","name":"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling","headline":"Las funciones ALL* como modificadores de CALCULATE","author":{"@id":"https:\/\/bicontrolling.com\/index.php\/author\/vlozanoluque_sg8t8mat\/#author"},"publisher":{"@id":"https:\/\/bicontrolling.com\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/07\/DAX-Studio-Consulta.png?fit=708%2C383&ssl=1","@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#articleImage","width":708,"height":383},"datePublished":"2023-07-20T08:00:00+02:00","dateModified":"2023-09-11T10:34:28+02:00","inLanguage":"es-ES","mainEntityOfPage":{"@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#webpage"},"isPartOf":{"@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#webpage"},"articleSection":"Arquitectura de datos, DAX, BI, DAX, Inteligencia de negocios, Power BI, Power Pivot"},{"@type":"BreadcrumbList","@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/#listItem","position":1,"name":"Inicio","item":"https:\/\/bicontrolling.com\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/#listItem","name":"Arquitectura de datos"}},{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/#listItem","position":2,"name":"Arquitectura de datos","item":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#listItem","name":"Las funciones ALL* como modificadores de CALCULATE"},"previousItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/#listItem","name":"Inicio"}},{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#listItem","position":3,"name":"Las funciones ALL* como modificadores de CALCULATE","previousItem":{"@type":"ListItem","@id":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/#listItem","name":"Arquitectura de datos"}}]},{"@type":"Organization","@id":"https:\/\/bicontrolling.com\/#organization","name":"Business Intelligence Controlling","description":"La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial","url":"https:\/\/bicontrolling.com\/"},{"@type":"Person","@id":"https:\/\/bicontrolling.com\/index.php\/author\/vlozanoluque_sg8t8mat\/#author","url":"https:\/\/bicontrolling.com\/index.php\/author\/vlozanoluque_sg8t8mat\/","name":"Admin","image":{"@type":"ImageObject","@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/00c17f691e05a0999c7ea23a9ae4aa6e7ae25f55cd91ae9629fe81a02ae98278?s=96&d=mm&r=g","width":96,"height":96,"caption":"Admin"}},{"@type":"WebPage","@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#webpage","url":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/","name":"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling","description":"En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza la funci\u00f3n CALCULATE.","inLanguage":"es-ES","isPartOf":{"@id":"https:\/\/bicontrolling.com\/#website"},"breadcrumb":{"@id":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/#breadcrumblist"},"author":{"@id":"https:\/\/bicontrolling.com\/index.php\/author\/vlozanoluque_sg8t8mat\/#author"},"creator":{"@id":"https:\/\/bicontrolling.com\/index.php\/author\/vlozanoluque_sg8t8mat\/#author"},"datePublished":"2023-07-20T08:00:00+02:00","dateModified":"2023-09-11T10:34:28+02:00"},{"@type":"WebSite","@id":"https:\/\/bicontrolling.com\/#website","url":"https:\/\/bicontrolling.com\/","name":"Business Intelligence Controlling","description":"La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial","inLanguage":"es-ES","publisher":{"@id":"https:\/\/bicontrolling.com\/#organization"}}]},"og:locale":"es_ES","og:site_name":"Business Intelligence Controlling | La nueva generaci\u00f3n del reporting econ\u00f3mico-financiero y el control de gesti\u00f3n empresarial","og:type":"article","og:title":"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling","og:description":"En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza la funci\u00f3n CALCULATE.","og:url":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/","article:published_time":"2023-07-20T06:00:00+00:00","article:modified_time":"2023-09-11T08:34:28+00:00","twitter:card":"summary","twitter:title":"Las funciones ALL* como modificadores de CALCULATE | Business Intelligence Controlling","twitter:description":"En este art\u00edculo vamos a analizar, mediante varios ejemplos, como se comportan las funciones de la familia ALL cuando las usamos como la funci\u00f3n de primer nivel en un argumento de filtro de CALCULATE. En estos casos, ALL deja de ser una funci\u00f3n tabular y se transforma en un modificador de CALCULATE, sin la capacidad de devolver ning\u00fan resultado ni de introducir filtros en el contexto. Veremos las implicaciones que conlleva este cambio de comportamiento, as\u00ed como su relaci\u00f3n con otros conceptos importantes del lenguaje DAX y del modelo tabular en general, como las tablas expandidas o el orden de ejecuci\u00f3n del algoritmo que realiza la funci\u00f3n CALCULATE."},"aioseo_meta_data":{"post_id":"1655","title":null,"description":null,"keywords":[],"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":[],"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[],"defaultGraph":"","defaultPostTypeGraph":""},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-31 11:36:59","updated":"2025-06-04 12:56:06","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bicontrolling.com\/\" title=\"Inicio\">Inicio<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/\" title=\"Arquitectura de datos\">Arquitectura de datos<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tLas funciones ALL* como modificadores de CALCULATE\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Inicio","link":"https:\/\/bicontrolling.com\/"},{"label":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},{"label":"Las funciones ALL* como modificadores de CALCULATE","link":"https:\/\/bicontrolling.com\/index.php\/2023\/07\/20\/las-funciones-all-como-modificadores-de-calculate\/"}],"jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":275,"url":"https:\/\/bicontrolling.com\/index.php\/2018\/03\/31\/patron-total-acumulado-en-power-bi\/","url_meta":{"origin":1655,"position":0},"title":"Patr\u00f3n del total acumulado en Power BI","author":"Admin","date":"31 marzo, 2018","format":false,"excerpt":"Una medida com\u00fan que encontraremos \u00fatil con frecuencia es aquella que computa el total acumulado de una m\u00e9trica a lo largo de las categor\u00edas de alguna dimensi\u00f3n, normalmente el tiempo. El acumulado (ya sea como suma, promedio o cualquier otro tipo de agregaci\u00f3n), es uno de los c\u00e1lculos m\u00e1s utilizados\u2026","rel":"","context":"En \u00abDAX\u00bb","block_context":{"text":"DAX","link":"https:\/\/bicontrolling.com\/index.php\/category\/dax-power-pivot\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2017\/12\/image-1-1.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":608,"url":"https:\/\/bicontrolling.com\/index.php\/2018\/07\/25\/userelationship-en-columnas-calculadas\/","url_meta":{"origin":1655,"position":1},"title":"Uso de la funci\u00f3n USERELATIONSHIP en columnas calculadas","author":"Admin","date":"25 julio, 2018","format":false,"excerpt":"Introducci\u00f3n En un modelo tabular con relaciones inactivas podemos usar la funci\u00f3n USERELATIONSHIP() para activar una de ellas durante el tiempo de ejecuci\u00f3n de un determinado c\u00e1lculo con DAX. Para ello, simplemente tenemos que especificar dicha funci\u00f3n (y los par\u00e1metros correspondientes) como uno de los argumentos de filtro de la\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-121-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-121-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-121-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-121-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/08\/image-121-1.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":541,"url":"https:\/\/bicontrolling.com\/index.php\/2018\/05\/26\/tasas-de-variacion-con-time-intelligence\/","url_meta":{"origin":1655,"position":2},"title":"Tasas de variaci\u00f3n e Inteligencia de Tiempo","author":"Admin","date":"26 mayo, 2018","format":false,"excerpt":"Introducci\u00f3n Data Analysis Expressions (DAX) incluye la importante funcionalidad de Time Intelligence o inteligencia de tiempo,\u00a0funciones integradas en el lenguaje con las que podemos manipular y agregar datos en funci\u00f3n de periodos temporales para construir y comparar c\u00e1lculos sobre dichos periodos. Este tipo de an\u00e1lisis de series temporales es esencial\u2026","rel":"","context":"En \u00abDAX\u00bb","block_context":{"text":"DAX","link":"https:\/\/bicontrolling.com\/index.php\/category\/dax-power-pivot\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2018\/07\/image-5-2.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1466,"url":"https:\/\/bicontrolling.com\/index.php\/2020\/10\/19\/diagramas-pareto-powerbi\/","url_meta":{"origin":1655,"position":3},"title":"Diagramas de Pareto din\u00e1micos en Power BI","author":"Admin","date":"19 octubre, 2020","format":false,"excerpt":"Introducci\u00f3n El\u00a0diagrama de Pareto, tambi\u00e9n conocido como\u00a0curva cerrada\u00a0o\u00a0distribuci\u00f3n A-B-C, es un gr\u00e1fico combinado de columnas y l\u00edneas en el que los valores individuales se representan en orden descendente por columnas, y el total acumulado se representa a trav\u00e9s de la l\u00ednea. El nombre del gr\u00e1fico proviene del principio de Pareto,\u2026","rel":"","context":"En \u00abControlling \/ Dir. Financiera\u00bb","block_context":{"text":"Controlling \/ Dir. Financiera","link":"https:\/\/bicontrolling.com\/index.php\/category\/controlling-dir-financiera\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/10\/Imagen-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/10\/Imagen-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/10\/Imagen-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/10\/Imagen-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2020\/10\/Imagen-1.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":1002,"url":"https:\/\/bicontrolling.com\/index.php\/2019\/07\/04\/presupuestos-y-otros-datos-a-diferente-granularidad-en-power-bi\/","url_meta":{"origin":1655,"position":4},"title":"Integraci\u00f3n de previsiones presupuestarias y otros datos a diferente granularidad en Power BI","author":"Admin","date":"4 julio, 2019","format":false,"excerpt":"Introducci\u00f3n El modelado de previsiones presupuestarias constituye uno de los escenarios m\u00e1s desafiantes en el campo del dise\u00f1o y explotaci\u00f3n de modelos de datos en Power BI. Las estructuras de datos en dicha herramienta se basan en el motor de Analysis Services y en la tecnolog\u00eda xVelocity (previamente denominada VertiPaq);\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/07\/desviaciones-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/07\/desviaciones-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/07\/desviaciones-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/07\/desviaciones-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/07\/desviaciones-1.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2019\/07\/desviaciones-1.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2142,"url":"https:\/\/bicontrolling.com\/index.php\/2023\/11\/13\/tablas-de-intervalos-de-fechas-y-relaciones-virtuales\/","url_meta":{"origin":1655,"position":5},"title":"Tablas de intervalos de fechas y relaciones virtuales","author":"Admin","date":"13 noviembre, 2023","format":false,"excerpt":"En el \u00faltimo art\u00edculo utilizamos DAX para analizar las ventas de una empresa a partir de una tabla en la que dispon\u00edamos de los precios para un determinado cliente, art\u00edculo y rango de fechas. En este art\u00edculo vamos a complicar un poco m\u00e1s el requisito de negocio y veremos c\u00f3mo\u2026","rel":"","context":"En \u00abArquitectura de datos\u00bb","block_context":{"text":"Arquitectura de datos","link":"https:\/\/bicontrolling.com\/index.php\/category\/arquitectura-de-datos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/image-11.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/image-11.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/image-11.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/bicontrolling.com\/wp-content\/uploads\/2023\/08\/image-11.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts\/1655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/comments?post=1655"}],"version-history":[{"count":54,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts\/1655\/revisions"}],"predecessor-version":[{"id":2217,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/posts\/1655\/revisions\/2217"}],"wp:attachment":[{"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/media?parent=1655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/categories?post=1655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/tags?post=1655"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/bicontrolling.com\/index.php\/wp-json\/wp\/v2\/post_series?post=1655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}