Join us for an expert-led overview of the tools and concepts you'll need to pass exam PL-300. The first session starts on June 11th. See you there!
Get registeredPower BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.
En primer lugar, quiero aclarar que no estoy buscando una solución específica, sino más bien una respuesta teórica.
Tengo un modelo de esquema de estrella simple con transacciones de datos financieros y tablas de dimensiones vinculadas a ellas.
El tamaño del modelo es de ~250 MB.
Para mostrar una vista simple de P&L, he hecho lo siguiente:
Todas las medidas son bastante sencillas y esta consulta específica tarda unos 500 ms en ejecutarse.
Mi pregunta es... ¿Es posible hacer que funcione más rápido, por ejemplo, hasta 100 ms o 200 ms, o es lo mejor que podría ejecutar, dado que todas las medidas son bastante sencillas y no hay margen para optimizarlas más?
Nota: Ya intenté aumentar la capacidad de la tela de F2 a F4 e incluso a F64 y eso no hizo ninguna diferencia.
DEFINE
---- MODEL MEASURES BEGIN ----
MEASURE __Metrics[Amount] = SUM ( Financials[Accounting Currency Amount Signed] )
// ACTUALS METRICS
MEASURE __Metrics[Amount_AC] = CALCULATE ( [Amount], KEEPFILTERS ( Financials[Scenario Code] = "FY24 ACT" ) )
MEASURE __Metrics[Revenue_AC] = CALCULATE ([Amount_AC],KEEPFILTERS ( MainAccount[Main Account Type] = "Revenue" ))
MEASURE __Metrics[Expense_AC] = CALCULATE ([Amount_AC],KEEPFILTERS ( MainAccount[Main Account Type] = "Expense" ))
MEASURE __Metrics[EBITDA_AC] = [Revenue_AC] - [Expense_AC]
MEASURE __Metrics[EBITDA%_AC] = DIVIDE ( [EBITDA_AC], [Revenue_AC] )
// PLAN METRICS
MEASURE __Metrics[Amount_PL] = CALCULATE ( [Amount], KEEPFILTERS ( Financials[Scenario Code] = "FY24 BUD" ) )
MEASURE __Metrics[Revenue_PL] = CALCULATE ([Amount_PL], KEEPFILTERS ( MainAccount[Main Account Type] = "Revenue" ))
MEASURE __Metrics[Expense_PL] = CALCULATE ([Amount_PL],KEEPFILTERS ( MainAccount[Main Account Type] = "Expense" ))
MEASURE __Metrics[EBITDA_PL] = [Revenue_PL] - [Expense_PL]
MEASURE __Metrics[EBITDA%_PL] = DIVIDE ( [EBITDA_PL], [Revenue_PL] )
// Metric to show as an income statement
MEASURE __IncomeStatement[IncomeStatement_AC] =
VAR __Metric = SELECTEDVALUE ( '__IncomeStatement'[Metric Short Name] )
VAR __Result =
SWITCH (
__Metric,
"REV", [Revenue_AC],
"EXP", [Expense_AC],
"EBITDA", [EBITDA_AC],
"EBITDA%", [EBITDA%_AC],
BLANK ()
)
RETURN
__Result
MEASURE __IncomeStatement[IncomeStatement_PL] =
VAR __Metric = SELECTEDVALUE ( '__IncomeStatement'[Metric Short Name] )
VAR __Result =
SWITCH (
__Metric,
"REV", [Revenue_PL],
"EXP", [Expense_PL],
"EBITDA", [EBITDA_PL],
"EBITDA%", [EBITDA%_PL],
BLANK ()
)
RETURN
__Result
MEASURE __IncomeStatement[IncomeStatement_AC-PL] = [IncomeStatement_AC] - [IncomeStatement_PL]
MEASURE __IncomeStatement[IncomeStatement_AC-PL%] = IF (
CONTAINSSTRING ( SELECTEDVALUE ( '__IncomeStatement'[Metric Short Name] ), "%" ),
BLANK (),
DIVIDE ( [IncomeStatement_AC-PL], __IncomeStatement[IncomeStatement_PL] )
)
---- MODEL MEASURES END ----
VAR __DS0Core =
SUMMARIZECOLUMNS (
'__IncomeStatement'[Metric Name],
'__IncomeStatement'[Metric ID],
'__CG_Period'[Period],
'__CG_Period'[Ordinal],
"AC", '__IncomeStatement'[IncomeStatement_AC],
"PL", '__IncomeStatement'[IncomeStatement_PL],
"Var", '__IncomeStatement'[IncomeStatement_AC-PL],
"Var%", __IncomeStatement[IncomeStatement_AC-PL%]
)
VAR __DS0PrimaryWindowed =
TOPN (
101,
SUMMARIZE (
__DS0Core,
'__IncomeStatement'[Metric Name],
'__IncomeStatement'[Metric ID]
),
'__IncomeStatement'[Metric ID], 1,
'__IncomeStatement'[Metric Name], 1
)
VAR __DS0SecondaryBase =
SUMMARIZE ( __DS0Core, '__CG_Period'[Period], '__CG_Period'[Ordinal] )
VAR __DS0Secondary =
TOPN (
102,
__DS0SecondaryBase,
'__CG_Period'[Ordinal], 1,
'__CG_Period'[Period], 1
)
VAR __DS0BodyLimited =
NATURALLEFTOUTERJOIN (
__DS0PrimaryWindowed,
SUBSTITUTEWITHINDEX (
__DS0Core,
"ColumnIndex", __DS0Secondary,
'__CG_Period'[Ordinal], ASC,
'__CG_Period'[Period], ASC
)
)
EVALUATE
__DS0BodyLimited
ORDER BY
'__IncomeStatement'[Metric ID],
'__IncomeStatement'[Metric Name]
Tampoco veo nada obviamente malo o malo en DAX Studio. Sin embargo, el porcentaje del motor de Fórmula es alto, pero no estoy seguro de qué más se puede hacer para reducirlo en este caso.
Agradecería cualquier aporte para saber si hay margen para mejorar esto aún más o es lo mejor que se puede hacer.
Examine el plan de consulta. Compruebe especialmente si hay un gran número de registros. Refactorice el código para realizar agregaciones antes para reducir la cardinalidad lo antes posible (pero no antes)
Compruebe si hay errores de instancias reservadas. Sustituya SUMMARIZE por SUMMARIZECOLUMNS. Elimine los CallbackDataIDs.