es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo calcular la suma de diferentes tablas separadas por años y cuál es el mejor modelo de datos para respaldar esta operación? Power BI.

Resultado Deseado

Elegir año desde el Slicer, devolver el resultado de la suma del Scorecard.
enter image description here
Problemas
No se puede poner una sola medida en el Scorecard y aplicarla para calcular todas las tablas mientras se selecciona el año por el Slicer.

por ejemplo:
sum(table20[Score])
sum(table21[Score])
sum(table22[Score])
  • Es necesario evitar agregar tablas ya que cada tabla de un solo año contiene más de millones de filas.
  • Todas las tablas se importan de Power BI Data Flow sin usar la consulta directa.

Datos

table20
YEAR    GEO Type    Score
2020    Asia    A   1
2020    Africa  A   2.5
2020    CentralAfrica   A   0
2020    Europe  A   0
2020    MiddleEast  A   0
2020    America A   1.5
table21
YEAR    GEO Type    Score
2021    Asia    A   3
2021    Africa  A   2
2021    CentralAfrica   A   6
2021    Europe  A   1
2021    MiddleEast  A   2
2021    America A   8
table22
YEAR    GEO Type    Score
2022    Asia    A   4
2022    Africa  A   0
2022    CentralAfrica   C   3
2022    Europe  C   4
2022    MiddleEast  A   1
2022    America A   5

Relación
La tabla de calendario vincula esas tablas.

Calander = CALENDAR(DATE(2020,1,1),DATE(2022,12,31))

enter image description here

¿Cuál es la mejor manera de lograr esto sin agregar más tablas a un conjunto de datos más grande?
¿No está seguro si la agregación basada en la “tabla importada” puede ayudar con el rendimiento?
Por favor, avísenos si mi concepto es básicamente incorrecto, como que no se puede evitar agregar tablas, etc.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    Una forma de lograr el resultado deseado sin agregar tablas es mediante el uso de medidas DAX.

    Primero, cree una medida que calcule la suma de Score para un año específico:

    Total Año = 
    VAR añoSeleccionado = SELECTEDVALUE('Calander'[Año])
    RETURN
        IF(
            ISBLANK(añoSeleccionado),
            BLANK(),
            CALCULATE(SUM('table20'[Score]), FILTER('table20', 'table20'[AÑO] = añoSeleccionado))
                + CALCULATE(SUM('table21'[Score]), FILTER('table21', 'table21'[AÑO] = añoSeleccionado))
                + CALCULATE(SUM('table22'[Score]), FILTER('table22', 'table22'[AÑO] = añoSeleccionado))
        )
    

    Esta medida utiliza la función SELECTEDVALUE para obtener el año seleccionado del Slicer. Si no se selecciona ningún año, devuelve BLANK. De lo contrario, calcula la suma de Score para cada tabla utilizando las funciones CALCULATE y SUM y filtra la tabla por el año seleccionado.

    A continuación, agregue una visualización de tarjeta al informe y ajuste el filtro de nivel visual a la medida Total Año. Esto mostrará la suma de Score para el año seleccionado.

    Alternativamente, puede usar una visualización de matriz para mostrar la suma de Score para cada año y geo:

    Total Año Geo = 
    VAR añoSeleccionado = SELECTEDVALUE('Calander'[Año])
    RETURN
        IF(
            ISBLANK(añoSeleccionado),
            BLANK(),
            SUMX(
                ADDCOLUMNS(
                    UNION('table20', 'table21', 'table22'),
                    "Año", [AÑO],
                    "Geo", [GEO],
                    "Score", [Score]
                ),
                IF([Año] = añoSeleccionado, [Score], BLANK())
            )
        )
    

    Esta medida utiliza las funciones ADDCOLUMNS y UNION para combinar las tablas y agregar columnas calculadas para Año, Geo y Score. Luego utiliza las funciones SUMX y IF para calcular la suma de Score para el año seleccionado y mostrarlo en la visualización de matriz.

    Ambas soluciones funcionarán sin agregar tablas y sin usar Direct Query. Sin embargo, el rendimiento puede variar dependiendo del tamaño de las tablas y la complejidad del informe. Siempre es una buena idea probar su solución con datos de muestra y optimizar según sea necesario.

Comments are closed.