cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Medidas a tener en cuenta el contexto de fila y las fechas para el cálculo

Hola, es un problema largo, pero espero explicarlo bien. Comencemos con los datos sin procesar:

(Disculpas por no poder formatear la tabla correctamente aquí.)

fechagrupoGrupo de padresIrrelevanteColumndevoluciónÍndice de retornoÍndice de rendimientos acumuladosPrev_Month_Cumulative_Index
31-Dic-15APG1abecedario0.00%1.0001.000en
31-Dic-15BPG1abecedario0.00%1.0001.000en
31-Dic-15CPG1abecedario0.00%1.0001.000en
31-Dic-15DPG1abecedario0.00%1.0001.000en
31-Dic-15EPG2abecedario0.00%1.0001.000en
31-Dic-15FPG2abecedario0.00%1.0001.000en
31-Dic-15GPG2abecedario0.00%1.0001.000en
31-Dic-15HPG2abecedario0.00%1.0001.000en
29-Enero-16APG1abecedario4.61%1.0461.0461.000
29-Enero-16BPG1abecedario-3.57%0.9640.9641.000
29-Enero-16CPG1abecedario-1.79%0.9820.9821.000
29-Enero-16DPG1abecedario-5.97%0.9400.9401.000
29-Enero-16EPG2abecedario0.06%1.0011.0011.000
29-Enero-16FPG2abecedario4.51%1.0451.0451.000
29-Enero-16GPG2abecedario-4.54%0.9550.9551.000
29-Enero-16HPG2abecedario-3.79%0.9620.9621.000
29-Febrero-16APG1abecedario2.12%1.0211.0681.046
29-Febrero-16BPG1abecedario-5.51%0.9450.9110.877
29-Febrero-16CPG1abecedario-3.34%0.9670.9491.009
29-Febrero-16DPG1abecedario4.30%1.0430.9810.991
29-Febrero-16EPG2abecedario-7.68%0.9230.9240.931
29-Febrero-16FPG2abecedario-4.95%0.9500.9930.932
29-Febrero-16GPG2abecedario-2.13%0.9790.9340.974
29-Febrero-16HPG2abecedario0.37%1.0040.9660.930
31-Mar-16APG1abecedario-2.48%0.9751.0420.895
31-Mar-16BPG1abecedario-2.94%0.9710.8840.847
31-Mar-16CPG1abecedario-1.03%0.9900.9390.884
31-Mar-16DPG1abecedario0.31%1.0030.9840.816
31-Mar-16EPG2abecedario3.84%1.0380.9590.776
31-Mar-16FPG2abecedario4.93%1.0491.0420.759
31-Mar-16GPG2abecedario6.88%1.0690.9980.762
31-Mar-16HPG2abecedario1.69%1.0170.9820.743

datos brutos

Para empezar, las columnas [Cumulative_Returns_Index] y [Prev_Month_Cumulative_Index] no forman parte de los datos sin procesar, pero las creé como columnas auxiliares en Excel para facilitar la explicación de cuáles deben ser los resultados. Si es posible, por favor hágamelo saber cómo crearlos ya sea como columnas calculadas, o hacer todo como medidas.

Declaración de problemas

Me gustaría crear una medida que tendrá en cuenta un intervalo de fechas (definido a través de una segmentación de datos) y, a continuación, calcular los rendimientos acumulativos del grupo, rebasados en la fecha más temprana del intervalo de fechas. He desglosado el problema tanto como puedo para tratar de hacer más fácil obtener ayuda:

  1. Busque la fecha más pequeña en el intervalo de fechas (esta fecha más pequeña será común en todos los grupos)
    • FIRSDATE() / MINX() ?
    • Filtrar por grupos (proporcionado como contexto de fila)
    • Busque los retornos acumulativos hasta la fecha, rebasados en los rendimientos acumulativos de la fecha más temprana.
      • Por ejemplo, para el Grupo A por un período de enero a marzo, sus rendimientos acumulados serían los siguientes, ya que actualmente se basa en enero (más específicamente, el comienzo de enero/finales de diciembre):
        • (Implícito) 1-Enero: 1.000
        • 29-Enero: 1.046
        • 29-Febrero: 1.068
        • 31-Mar: 1.042
      • Para un período de febrero a marzo, el mismo Grupo A regresará:
        • (Implícito) 1-Feb: 1.000 <- 1.046/1.046
        • 29-Feb: 1.021 <- 1.068/1.046
        • 31-Mar: 0.996 <- 1.042/1.046

Producción esperada

La salida esperada, junto con los otros grupos presentes (usando sólo A, B y C para evitar que la lista se alarga demasiado), debería tener este aspecto:

Si se selecciona el intervalo de fechas de enero a marzo para los grupos A&B:

Wendeley-North_0-1620922393305.png

Si se selecciona el intervalo de fechas de febrero a marzo para los grupos A, B y C:

Wendeley-North_0-1620923456485.png

Cosas que he intentado:

He creado el [Cumulative_Returns_Index] y [Prev_Month_Cumulative_Index] a través de Python antes de importar los datos a PowerBI (pero me gustaría procesar los datos sin procesar si es posible), y he utilizado muchas horas para idear el siguiente código que no funcionó cuando más de 1 grupo estaba presente en la visualización (tabla). Sospecho que se debe a varios ref_indexes que se devuelven, pero PowerBI de alguna manera no pudo identificar los grupos correctos para usarlo a través del contexto de fila proporcionado en la visualización.

El siguiente es el código de todos modos, si ayuda:

Rebal_Cumu_Returns_AllSel = 
VAR ref_index =
    CALCULATE(
        VALUES( table[Prev_Mth_Cumulative_Returns_Index]), 
        FILTER( ALLSELECTED(table), 
                table[Date] = MINX(ALLSELECTED(table), table[Date]))
    )
RETURN
    DIVIDE(SELECTEDVALUE(table[Cumulative_Returns_Index]), ref_index)
Caso de uso final
Espero eventualmente utilizar esto en un gráfico de líneas, con retornos acumulativos como el eje Y y la fecha como un eje X. Es probable que los intervalos de fechas se alterne a través de una segmentación de datos.
Por favor, hágamelo saber si hay algo más que pueda proporcionar.
1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Ya que no puedo por alguna razón pegar código formateado aquí... bueno, tendrás que ver con una foto. arrepentido.

daxer_0-1620931949933.png

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Ya que no puedo por alguna razón pegar código formateado aquí... bueno, tendrás que ver con una foto. arrepentido.

daxer_0-1620931949933.png

View solution in original post

Hola, gracias por dar una respuesta. Sólo quería aclarar - ¿Indica Date[Year-Month] que tengo que crear una tabla que resuma la lista de fechas que tengo en mi tabla de hechos en el formato YYYY-MM?

Además, en la línea 40 anterior, se supone que ALLSELECTED(Dates) es ALLSELECTED(DateTable), donde DateTable hace referencia a la tabla antes mencionada creada anteriormente en el formato AAAA-MM?

Para responder a su pregunta inicial, sí, la jerarquía es natural. ¿Significa que la variable onlyOneParentGroupVisible ya no es necesaria?

Hola sólo quería añadir - ya que la tabla de hechos por naturaleza tiene un mes único a lo largo de todos los años, parecía que la mesa de fechas podría ser descartada también. He enmendado la fórmula en consecuencia, y parece que funciona. Gracias @daxer !

La fórmula final que usé fue:

Cumulative_Returns_Index_Rebased = 
VAR isGroupInScope = ISINSCOPE( table[Group] )
VAR shouldCalculate = True
    && isGroupInScope
VAR Result =
    IF( shouldCalculate,
        VAR firstCumulativeReturnsIndex = 
            MAXX( 
                CALCULATETABLE(
                    TOPN( 1,
                        table,
                        table[Date],
                        ASC
                    ),
                    ALLSELECTED( table[Date] )
                ),
                table[Cumulative_Returns_Index]
            )
        VAR currentCumulativeIndex = 
            SELECTEDVALUE( table[Cumulative_Returns_Index] )
        VAR relativeCumulativeIndex =
            DIVIDE( currentCumulativeIndex, 
                    firstCumulativeReturnsIndex
            )
        RETURN
            relativeCumulativeIndex
    )
RETURN
    Result

Si hay alguna preocupación con respecto a los cambios que he hecho (para excluir la creación de una tabla de fechas y la comprobación del grupo primario) que usted piensa que potencialmente podría conducir a problemas en la línea, hágamelo saber.

salud.

@Wendeley-Norte

Todo lo que puedo decirte es esto. Si tiene un modelo en el que no tiene tablas separadas para cotas, especialmente la dimensión de fecha y hora... entonces 100% lo estás haciendo totalmente mal. No te sorprendas cuando algún día descubras que tus cifras no siempre son correctas. Pero dado que es muy difícil detectar inmediatamente los problemas que sin duda tendrá un día (¡porque esto depende - sorpresa, sorpresa! - de la distribución de datos en columnas), basará sus decisiones en cifras equivocadas.

Es tu decisión no seguir mi consejo. Sobre www.sqlbi.com el suyo es un artículo de Alberto Ferrari que explica por qué el modelo de una mesa en ciertas circunstancias producirá cifras equivocadas y no se puede hacer nada al respecto aparte de... construir un modelo correcto, lo que significa STAR-SCHEMA.

Lo tomaré en cuenta y lo investigaré más, incluyendo la lectura de algunos artículos sobre sqlbi.com. Muchas gracias una vez más. salud.

Syndicate_Admin
Administrator
Administrator

Primera pregunta. ¿Es natural el grupo primario de jerarquía -> Agrupar? Una jerarquía natural es aquella que tiene hojas únicas. Por lo tanto, por ejemplo, no puede tener ninguna hoja (piensa: Grupo) debajo de 2 grupos primarios diferentes. ¿Es esto cierto? Porque si no es así, entonces usted tiene que decir cómo desea calcular cuando el mismo grupo, por ejemplo A, está visible en el contexto actual, pero no se ha seleccionado ningún grupo primario.

Helpful resources

Announcements
PBI User Groups

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group!

MBAS on Demand

Microsoft Business Applications Summit sessions

On-demand access to all the great content presented by the product teams and community members! #MSBizAppsSummit #CommunityRocks

MBAS Attendee Badge

Claim Your Badge & Digital Swag!

Check out how to claim yours today!