SUMMARIZECOLUMNS https://interactivechaos.ovh/es es Suma de los valores máximos de cada categoría https://interactivechaos.ovh/es/dax/scenario/suma-de-los-valores-maximos-de-cada-categoria <span class="field field--name-title field--type-string field--label-hidden">Suma de los valores máximos de cada categoría</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/es/user/1" typeof="schema:Person" property="schema:name" datatype="">admin</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mar, 08/01/2019 - 19:19</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>En este escenario partimos de una tabla de hechos ("Data") en la que cada registro tiene asignado una categoría:</p> <img alt="Datos de partida" data-entity-type="file" data-entity-uuid="96494bcb-fe75-421b-8f87-db56ee6f1d2b" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_01.JPG" class="align-center" width="159" height="220" loading="lazy" /><p>El objetivo es calcular el valor máximo de cada categoría (7 para la categoría A, 3 para B y 8 para C) y sumarlos (18 en este caso).</p> <p>La resolución de este escenario incluye dos pasos:</p> <p>1. En el primero deberemos calcular el valor máximo de cada categoría para llegar a una tabla intermedia semejante a la siguiente:</p> <img alt="Tabla intermedia con los valores máximos por categoría" data-entity-type="file" data-entity-uuid="df216c47-c8c0-41eb-ab0a-991917599a9d" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_02.JPG" class="align-center" width="197" height="93" loading="lazy" /><p>2. En el segundo deberemos recorrer la tabla intermedia generada sumando los valores encontrados.</p> <h3>1er paso</h3> <p>Para crear esta tabla intermedia podemos recurrir tanto a la función <a href="/dax/function/summarize">SUMMARIZE</a> como a <a href="/dax/function/summarizecolumns">SUMMARIZECOLUMNS</a> o <a href="/dax/function/groupby">GROUPBY</a>. Veamos los tres casos:</p> <h4>SUMMARIZE</h4> <p>El código sería el siguiente:</p> <div class="codigo"> <p>Max value per category summarize =</p> <p>    SUMMARIZE(</p> <p>        Data;</p> <p>        Data[Category];</p> <p>        "Max value"; MAX(Data[Value])</p> <p>    )</p> </div> <p>Básicamente estaríamos agregando el campo <em>Category</em> de la tabla <em>Data</em> para crear el campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> con la función <a href="/dax/function/max">MAX</a> una vez filtrado:</p> <img alt="Cálculo de la tabla intermedia con la función SUMMARIZE" data-entity-type="file" data-entity-uuid="3acd4fe9-c39b-4752-8526-ede313a7b2a0" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_03.JPG" class="align-center" width="380" height="215" loading="lazy" /><h4>SUMMARIZECOLUMNS</h4> <p>En este segundo caso el código sería el siguiente:</p> <div class="codigo"> <p>Max value per category summarizecolumns =</p> <p>    SUMMARIZECOLUMNS(</p> <p>    Data[Category];</p> <p>    "Max value";</p> <p>    MAX(Data[Value])</p> <p>)</p> </div> <img alt="Cálculo de la tabla intermedia con la función SUMMARIZECOLUMNS" data-entity-type="file" data-entity-uuid="7b547472-d0c6-41d8-8711-3a5192760aee" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_04.JPG" class="align-center" width="393" height="215" loading="lazy" /><p>Estamos agregando el campo <em>Data[Category]</em> y creando el nuevo campo <em>"Max value"</em> calculando el valor máximo del campo <em>Data[Value]</em> una vez filtrado, también con la función <a href="/dax/function/max">MAX</a>.</p> <h4>GROUPBY</h4> <p>Por último, utilizando la función <em>GROUPBY </em>el código quedaría de la siguiente forma:</p> <div class="codigo"> <p>Max value per category groupby =</p> <p>GROUPBY(</p> <p>    Data;</p> <p>    Data[Category];</p> <p>    "Max value"; MAXX(CURRENTGROUP(); Data[Value])</p> <p>    )</p> </div> <p>En este caso estamos agrupando la tabla <em>Data</em> según la columna <em>Data[Category]</em> y generando la columna "<em>Max value</em>" utilizando la función iterativa <a href="/dax/function/maxx">MAXX</a>. </p> <img alt="Cálculo de la tabla intermedia con la función GROUPBY" data-entity-type="file" data-entity-uuid="390dbbbf-8984-403f-8733-8d3ee69b5dc7" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_05.JPG" class="align-center" width="469" height="218" loading="lazy" /><h3>2º paso</h3> <p>Una vez conseguida la tabla anterior usando cualquiera de los tres métodos (supongamos que usando la función <em>GROUPBY</em>), tendremos que volver a agregar la tabla sumando los valores de la columna <em>"Max value"</em>. En este paso, al contrario que en el paso anterior, no todas las funciones mencionadas servirían. Veámoslas una a una:</p> <h4>SUMMARIZE</h4> <p>El código para esta primera función sería el siguiente:</p> <div class="codigo"> <p>Sum of max value per category = <br />     SUMMARIZE(<br />         'Max value per category groupby';<br />         "Max"; SUM('Max value per category groupby'[Max value])<br />     )</p> </div> <p>Es decir, estaríamos agregando la tabla intermedia creada, <em>Max value per category groupby</em>, sin especificar el campo de agregación (pues no queremos más que la suma) y el nuevo campo a crear, <em>Max</em>, como la suma de los valores. El resultado sería el mostrado en la siguiente imagen:</p> <img alt="Cálculo del resultado final con la función SUMMARIZE" data-entity-type="file" data-entity-uuid="79fc6517-49bf-471c-b440-a221ce20a369" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_06.JPG" class="align-center" width="535" height="158" loading="lazy" /><p>Al no haber especificado el campo de agregación, DAX agrega todos los valores numéricos.</p> <p>Obsérvese, en todo caso, que con esta función, SUMMARIZE, no sería posible crear la tabla intermedia y realizar la agregación en una única expresión DAX, pues la función SUMMARIZE devuelve un error ("se espera una tabla de base")</p> <h4>SUMMARIZECOLUMNS</h4> <p>Con esta función, el código sería el siguiente:</p> <div class="codigo"> <p>Sum of max value per category = <br />     SUMMARIZECOLUMNS(<br />         "Max"; SUM('Max value per category groupby'[Max value])<br />     )</p> </div> <p>Estamos agregando la tabla intermedia creada, nuevamente sin especificar el campo de agregación, y creando el campo <em>Max</em> como la suma del campo <em>Max value</em> de la tabla intermedia. El resultado es el siguiente:</p> <img alt="Cálculo del resultado final con la función SUMMARIZECOLUMNS" data-entity-type="file" data-entity-uuid="ed2d8e78-9985-4165-8118-f0824d06bd9b" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_07.JPG" class="align-center" width="536" height="163" loading="lazy" /><p>Al igual que ocurre con SUMMARIZE, el intento de aplicar la función SUMMARIZECOLUMNS a una tabla intermedia creada en la misma expresión DAX devolvería un error.</p> <h4>GROUPBY</h4> <p>En este último caso, el código sería el siguiente:</p> <div class="codigo"> <p>Sum of max value per category = <br />     VAR Max_value_per_category =<br />         GROUPBY(<br />             Data;<br />             Data[Category];<br />             "Max value"; MAXX(CURRENTGROUP(); Data[Value])<br />         )<br />     RETURN<br />         GROUPBY(<br />             Max_value_per_category;<br />             "Sum"; SUMX(CURRENTGROUP(); [Max value])<br />         )</p> </div> <p>Estaríamos simplemente agregando la tabla intermedia generando como resultado la suma de los valores <em>Max value</em> de forma iterativa. El resultado es el siguiente:</p> <img alt="Cálculo del resultado final con la función GROUPBY" data-entity-type="file" data-entity-uuid="d918aa2a-faf7-41b9-9eab-c48896db8378" src="/sites/default/files/inline-images/dax_scenario_suma_maximos_cat_08.JPG" class="align-center" width="501" height="280" loading="lazy" /><p>En este tercer caso, sí es posible crear la tabla intermedia en la misma expresión DAX, lo que hace de esta función la más adecuada para este escenario.</p> </div> <div class="field field--name-field-funciones-dax-involucradas field--type-entity-reference field--label-above"> <div class="field__label">Funciones DAX involucradas</div> <div class="field__items"> <div class="field__item"><a href="/es/taxonomy/term/51" hreflang="es">SUMMARIZE</a></div> <div class="field__item"><a href="/es/taxonomy/term/59" hreflang="es">MAX</a></div> <div class="field__item"><a href="/es/taxonomy/term/39" hreflang="es">MAXX</a></div> <div class="field__item"><a href="/es/taxonomy/term/28" hreflang="es">SUM</a></div> <div class="field__item"><a href="/es/taxonomy/term/61" hreflang="es">SUMX</a></div> <div class="field__item"><a href="/es/taxonomy/term/58" hreflang="es">SUMMARIZECOLUMNS</a></div> <div class="field__item"><a href="/es/taxonomy/term/60" hreflang="es">GROUPBY</a></div> <div class="field__item"><a href="/es/taxonomy/term/68" hreflang="es">VAR</a></div> </div> </div> Tue, 08 Jan 2019 18:19:22 +0000 admin 356 at https://interactivechaos.ovh