RANKX https://interactivechaos.ovh/es es Rango de localizaciones según el número de unidades vendidas https://interactivechaos.ovh/es/dax/scenario/rango-de-localizaciones-segun-el-numero-de-unidades-vendidas <span class="field field--name-title field--type-string field--label-hidden">Rango de localizaciones según el número de unidades vendidas</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">Sáb, 06/07/2019 - 10:44</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>En este escenario queremos ordenar un conjunto de localizaciones (es decir, queremos asignarles un rango) según el número de unidades vendidas en cada una de ellas. Partimos de un listado ("<em>Movements</em>") de ventas en el que se incluye información sobre la fecha de la venta, la zona geográfica en la que se produjo y el número de unidades vendidas:</p> <img alt="Listado de ventas" data-entity-type="file" data-entity-uuid="dc87c462-9461-4d05-9d49-42fd06dfff24" src="/sites/default/files/inline-images/escenario-dax-0059.png" class="align-center" width="358" height="435" loading="lazy" /><p>Una segunda tabla ("<em>Geography</em>") incluye información sobre las zonas geográficas en cuestión:</p> <img alt="Localizaciones geográficas" data-entity-type="file" data-entity-uuid="53e6fe3a-fd8e-428b-b3c8-a1e71e54407a" src="/sites/default/files/inline-images/escenario-dax-0060.png" class="align-center" width="404" height="333" loading="lazy" /><p>Estas tablas están relacionadas a través del campo <em>Geography Id</em>:</p> <img alt="Modelo de datos" data-entity-type="file" data-entity-uuid="c0bf57f5-efda-47a5-ad9b-99be58e52cef" src="/sites/default/files/inline-images/escenario-dax-0061.png" class="align-center" width="509" height="308" loading="lazy" /><p>Como sabemos, la función <a href="/dax/function/rankx">RANKX</a> permite asignar rangos a las filas de una tabla según los resultados que se obtengan al evaluar una expresión. El problema surge precisamente en la evaluación de esta expresión. Veamos por qué: Comencemos añadiendo una nueva columna a la tabla de <em>Geography </em>con el siguiente código que supuestamente asigna rangos a cada fila de la tabla según el número total de unidades vendidas:</p> <div class="codigo"> <p>Rank = RANKX(<br />     Geography;<br />     SUM(Movements[Units])<br />     )</p> </div> <img alt="Función RANKX" data-entity-type="file" data-entity-uuid="6fbd2dd7-f3d8-4de5-9f7a-26e28885e687" src="/sites/default/files/inline-images/escenario-dax-0062.png" class="align-center" width="477" height="417" loading="lazy" /><p>El resultado es de 1 para todas las filas -lo que, obviamente, no es lo que esperábamos-. El problema surge del hecho de que la función <a href="/dax/function/sum">SUM</a> utilizada no es capaz de adaptarse al contexto de fila, y, en cada una de las ejecuciones (una por fila)- devuelve la suma de toda la columna <em>Movements[Units]</em>. Para permitir la transición entre ambos tipos de contexto deberemos utilizar la función <a href="/dax/function/calculate">CALCULATE</a>:</p> <div class="codigo"> <p>Rank = RANKX(<br />     Geography;<br />     CALCULATE(SUM(Movements[Units]))<br />     )</p> </div> <img alt="Función RANK tras utilizar la función CALCULATE para permitir la transición de contexto" data-entity-type="file" data-entity-uuid="4882de11-e3d6-4fe9-8699-fe30d0d0b633" src="/sites/default/files/inline-images/escenario-dax-0063.png" class="align-center" width="470" height="455" loading="lazy" /><p>Para confirmar que el resultado es el correcto, definamos una medida que sume el número de unidades vendidas:</p> <div class="codigo"> <p>Sum of Units = SUM(Movements[Units])</p> </div> <p>...y llevemos la lista de ciudades, la medida creada y el rango asignado a una visualización tipo tabla, ordenándola de mayor a menor según el valor de la medida:</p> <img alt="Lista de localizaciones ordenada según el número de unidades vendidas" data-entity-type="file" data-entity-uuid="f53ce9d9-b576-4c28-b0cf-8d591f54784c" src="/sites/default/files/inline-images/escenario-dax-0064.png" class="align-center" width="267" height="497" loading="lazy" /><p> </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/88" hreflang="es">RANKX</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/33" hreflang="es">CALCULATE</a></div> </div> </div> Sat, 06 Jul 2019 08:44:57 +0000 admin 1151 at https://interactivechaos.ovh