Rendimiento lento de la medida

Un usuario Pregunto ✅

Bokazoit

Yo uso esta medida:

Medlemskaber =

Var MaxDate = MAX (DimDato[Dato] )

REGRESO

CALCULAR (
DISTINCTCOUNT (FactMedlem[Klientnummer] ),
FILTRO (
FactMedlem,
(
HechoMedlem[OprettelsesDato] <= MaxDate
&& FactMedlem[OpsigelsesDato] > MaxDate
)
),
TODOS (DimDato)
)
Extrae datos de mi FactMedlem (base de datos de miembros que consta de alrededor de 400.000 filas con este aspecto:
Skærmbillede 2021-01-12 143340.jpg
Como se puede ver en la medida que utilizo en las dos últimas filas para crear esta vista
Skærmbillede 2021-01-12 143600.jpg
Muestra miembros activos cada mes.
Es lento recalcular los datos si cambio el período o el tipo de efecto. ¿Por qué es tan lento? 400.000 filas no es mucho 😞
Ejecuté el analizador de rendimiento y obtuve esta consulta:

// Consulta DAX
DEFINIR
VAR __DS0FilterTable =
FILTRAR(
KEEPFILTERS (VALUES (‘DimDato'[Dato])),
Y (‘DimDato'[Dato] > = FECHA (2020, 1, 1), ‘DimDato'[Dato] )

VAR __DS0FilterTable2 =
TREATAS ({«Faste støtter»}, ‘DimDonertype'[Donergruppe])

VAR __DS0FilterTable3 =
TREATAS ({«STØTTE – ÅR (Personligt)»}, ‘DimDonertype'[DonertypeNavn])

VAR __DS0Core =
RESUMEN COLUMNAS (
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[År],
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[Måned],
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[MonthNo],
__DS0FilterTable,
__DS0FilterTable2,
__DS0FilterTable3,
«Medlemmer», ‘FactMedlem'[Medlemmer]
)

VAR __DS0PrimaryWindowed =
TOPN (
1001,
__DS0Core,
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[År],
1,
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[MonthNo],
1,
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[Måned],
1
)

EVALUAR
__DS0PrimaryWindowed

PEDIR POR
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[År],
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[MonthNo],
‘LocalDateTable_288f3ccf-16f5-4ea7-b323-c3d544b4c02a'[Måned]

Y el momento de correr fue este:

Skærmbillede 2021-01-12 145439.jpg

Bokazoit

Gracias por las soluciones, pero no funcionó.

No tenía sentido conectar la dimensión de fecha a CreateDate o EndDate. Así que esa fue una mala por mi parte. Y eliminar esa conexión fue la parte 1 de la solución.

Creé el gráfico usando la fecha de la dimensión fechada, y eso fue lo que arruinó el rendimiento, y tiene sentido. Cambié la fecha a una fecha precalculada en la dimensión y usé un mes-año, un año y una semana-año en el eje x, y esa fue la parte 2 de la solución.

Supongo que cuando se usa una fecha simple con una medida, la medida intentará recalcular todos los puntos posibles en la dimensión de la fecha y eso, por supuesto, la ralentiza. Entonces, usar una fecha de fin de mes funcionó, por así decirlo 🙂

Bokazoit

Gracias por las soluciones, pero no funcionó.

No tenía sentido conectar la dimensión de fecha a CreateDate o EndDate. Así que esa fue una mala por mi parte. Y eliminar esa conexión fue la parte 1 de la solución.

Creé el gráfico usando la fecha de la dimensión fechada, y eso fue lo que arruinó el rendimiento, y tiene sentido. Cambié la fecha a una fecha precalculada en la dimensión y usé un mes-año, un año y una semana-año en el eje x, y esa fue la parte 2 de la solución.

Supongo que cuando se usa una fecha simple con una medida, la medida intentará recalcular todos los puntos posibles en la dimensión de la fecha y eso, por supuesto, la ralentiza. Entonces, usar una fecha de fin de mes funcionó, por así decirlo 🙂

Hola @Bokazoit,

Actualice la fórmula de su medida como se muestra a continuación y verifique si puede mejorar el rendimiento. Si aún no es así, ¿podría proporcionar su archivo pbix de muestra para solucionar el problema? Gracias.

Medlemskaber =
VAR MaxDate =
    MAX ( DimDato[Dato] )
RETURN
    CALCULATE (
        DISTINCTCOUNT ( FactMedlem[Klientnummer] ),
        KEEPFILTERS ( FactMedlem[OprettelsesDato] <= MaxDate
            && FactMedlem[OpsigelsesDato] > MaxDate ),
        ALL ( DimDato[Dato] )
    )

Además, revise el contenido en los siguientes enlaces. Espero que te puedan ayudar.

Mejore el rendimiento de Power BI con la fecha / hora automática y las variables DAX

Mejore el rendimiento de Power BI optimizando DAX

Prácticas recomendadas para la importación de datos en Power BI

Atentamente

d_gosbell

Una cosa que podría intentar es reducir el número de columnas en el contexto del filtro para la función CALCULAR. Actualmente, está filtrando toda la tabla de FactMedlem (por lo que todas las columnas de esa tabla se utilizarán en el contenido del filtro). Pruebe lo siguiente, donde simplemente filtra sobre las dos columnas de fecha (cambie resaltado en negrita) y vea si eso ayuda al rendimiento.

Medlemskaber =

Var MaxDate = MAX (DimDato[Dato] )

REGRESO

CALCULAR (
DISTINCTCOUNT (FactMedlem[Klientnummer] ),
FILTRO (
TODOS (FactMedlem[OprettelsesDato], HechoMedlem[OpsigelsesDato] )
(
HechoMedlem[OprettelsesDato] <= MaxDate
&& FactMedlem[OpsigelsesDato] > MaxDate
)
),
TODOS (DimDato)
)

Bokazoit

En respuesta a d_gosbell

Esa no es realmente una opción. La dimensión de la fecha no está relacionada con la tabla de hechos y eso, por supuesto, puede explicar el bajo tiempo de respuesta. Pero si conecto la dimensión de fecha con el hecho a través de la clave de fecha de inicio en la tabla de hechos y la clave de fecha en mi dimensión de fecha, los números no son correctos, pero la respuesta es instantánea.

Entonces no tengo ni idea de qué hacer

d_gosbell

En respuesta a Bokazoit

No entiendo por qué no cree que esta sea una opción. No estoy sugiriendo cambiar ninguna relación ni nada por el estilo, simplemente cambié HechoMedlem por TODOS (FactMedlem[OprettelsesDato], HechoMedlem[OpsigelsesDato] ) dentro del filtro. ¿Estás diciendo que probaste esto y arrojó un error o algo así?

Bokazoit

En respuesta a d_gosbell

Probé tu medida. Conecté la dimensión de la fecha con la fecha de inicio de mi Hecho. Y tu sugerencia realmente me dio lo que quería. Pero es aún más lento de lo que comencé. Esto es del analizador de rendimiento:

// Consulta DAX
DEFINIR
VAR __DS0FilterTable =
FILTRAR(
KEEPFILTERS (VALUES (‘DimDato'[Dato])),
Y (‘DimDato'[Dato] > = FECHA (2020, 1, 1), ‘DimDato'[Dato] )

VAR __DS0FilterTable2 =
TREATAS ({«Faste støtter»}, ‘DimDonertype'[Donergruppe])

VAR __DS0FilterTable3 =
TREATAS ({«STØTTE – ÅR (Personligt)»}, ‘DimDonertype'[DonertypeNavn])

VAR __DS0Core =
RESUMEN COLUMNAS (
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[År],
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[Måned],
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[MonthNo],
__DS0FilterTable,
__DS0FilterTable2,
__DS0FilterTable3,
«Medlemskaber», ‘FactMedlem'[Medlemskaber]
)

VAR __DS0PrimaryWindowed =
TOPN (
1001,
__DS0Core,
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[År],
1,
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[MonthNo],
1,
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[Måned],
1
)

EVALUAR
__DS0PrimaryWindowed

PEDIR POR
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[År],
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[MonthNo],
‘LocalDateTable_8f17ad71-0646-46e2-be45-61501a732b9f'[Måned]

Bokazoit

En respuesta a d_gosbell

Lo siento, quiero decir que no es una opción reducir la cantidad de columnas. Esa es la información mínima absoluta. Pero intentaré esa medida lo antes posible y volveré 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *