Modificación de filtro para medida

Muy buenas noches,

 

Estoy tratando de realizar una modificación de filtro que sea dinámica. Me explico:

Tengo una dimensión llamada AGE la cual segmenta los datos en columnas en la Pivot Table. Cada AGE muestra medidas de CANTIDAD. Necesito que para cada AGE se muestre una medida tal que CANTIDAD (age) / Cantidad (age-1). Adjunto captura de pantalla para mejor entendimiento.

 

Compañeros, me está volviendo loco este tema. He tratado mil cosas pero no doy con la tecla. Ojalá yo pueda aportar algo en un futuro en este foro. 

Os doy las gracias de antemano.Ejemplo

Hola Ismael,

Solo para confirmar que lo he entendido, tienes un campo AGE que es numérico y que contiene, por ejemplo, los valores 2, 7 y 4 (solo es un ejemplo). Y querrías que en una tabla (o visualización de algún tipo) para el primer valor de AGE (2 en mi ejemplo) se mostrara 2, para el valor 7 se mostrara 7/2 y para el valor 4 se mostrara 4/7 ¿es eso?

Si es eso, tengo otra pregunta ¿según qué criterio ordenas los valores de AGE? ¿es por orden natural? ¿o hay algún otro campo que sirva para esa ordenación?

Saludos

Verdasco

Buenas noches Verdasco,

 

En primer lugar gracias por tu pronta respuesta.

Sería tal como dices. AGE es un campo que indica antiguedad por lo que sería 0, 1, 2, 3 ... n. La intención es crear una medida que indique la tasa de variación "interage". Consecuentemente, esta ordenación es por orden numérico natural.

 

De nuevo muchas gracias

 

Ismael

Vale, a ver si te sirve esto (no es más que la idea): Parto de la siguiente tabla de datos (no te lo pregunté, pero deduzco que lo que te interesa no es el cociente entre edades sino el cociente de cada métrica asociada a cada edad):

Datos

El objetivo es, para cada fila, ser capaces de extraer el valor de la fila anterior para poder operar con ambos valores, el de la fila y el anterior (confírmame que la cosa va por aquí, por favor). Para ello lo que hago es lo siguiente:

Contando con que el campo Age está ordenado (y este criterio de ordenación es el que interesa), para cada fila extraigo la tabla resultante de filtrarla con el criterio de que Age sea menor que el Age actual (esto lo hago con la función EARLIEST), a continuación me quedo con la fila con el Age mayor (con la función TOPN), esto me asegura que estoy cogiendo la fila anterior a la actual. De ahí, me quedo solo con el campo cantidad, que podría usar para cualquier cálculo:

Valor anterior = 
    FIRSTNONBLANK(
        SELECTCOLUMNS(
            TOPN(1;
                FILTER(
                    Data;
                    Data[Age] < EARLIER(Data[Age])
                );
                Data[Age]
            );
            "Cantidad"; Data[Cantidad]
        );
        TRUE()
    )

Campo calculado adicional

A ver si esto te sirve, ya me dirás...

Verdasco

Muy buenos días,

 

Lo primero gracias por tu respuesta. Entiendo que este script es válido para el caso en que sólo exista una Cantidad para cada Age (es decir, Cantidad y Age sólo una vez). 

En mi caso, la consulta de datos tiene varios Age y Cantidades, tal que la siguiente captura adjunta. Además para cada país, existiría una dimensión provincia. Por lo que necesito el sumatorio de todos los age de ese país

Al ejecutar para mi caso, me da el error de que la medida se refiere a una fila anterior la cual no existe en este contexto.

a

 

Lo que necesitaría, entiendo, es que acuda al age-1 y haga el sumatorio de todas las cantidad para que al arrastrar la medida a la tabla dinámica se autofiltre por país (además País es desplegable por lo que debería desagregar la info . Este es un ejemplo, la la tabla en sí es mucha más compleja, pero creo que ahora el ejemplo representa mucho mejor a esta.

 

 

Muchas gracias Verdasco por tu tiempo y ayuda,

 

Saludos!

Hola Ismael_AyPa,

Parece evidente que lo primero que necesitas es una tabla con los valores agregados. Si partimos del peor de los casos, puedes crear una tabla calculada para cada nivel geográfico (una por país y otra por ciudad). Aquí ya tendríamos un único valor de Age por entrada. Y, a continuación, podrías crear tu medida usando la función ISINSCOPE para que detectase el nivel que tienes seleccionado en tu matriz. En el enlace anterior tienes un ejemplo de uso. La idea sería, para cada nivel de detalle incluir el código de Verdasco haciendo referencia a la tabla adecuada, tipo:

Nivel = 
    SWITCH(
        TRUE();
        ISINSCOPE(Geography[City]); **código de Verdasco con la tabla de ciudades**;
        ISINSCOPE(Geography[Country]); **código de Verdasco con la tabla de países**
    )

Yo creo que podría funcionarte...

Te ponía lo de "el peor de los casos" porque tendrías que crear dos tablas agregadas. El mejor de los casos sería crear esas tablas de forma temporal en tu medida, pero el uso de tablas temporales está bastante limitado con muchas funciones, según me dice la experiencia, y eso siempre limita el código a usar.

Un saludo y ya contarás

AH

Enviado por Ismael_AyPa el Vie, 18/10/2019 - 21:29