Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola
Tengo la necesidad de mostrar diferentes funciones CALCULATE(SUM() dependiendo de la selección del usuario (período, 'colaborador')
Funciona, sin embargo, el rendimiento es muy pobre cuando intento mostrar los datos subyacentes línea por línea en una tabla.
¿Alguna idea de cómo se podría mejorar esta medida? Me doy cuenta de que probablemente no sea el más eficiente. Usar SWITCH(TRUE()) parece un poco mejor
Muchas gracias.
Contrib FlexQ SUMMARY =
VAR selectperiod =
SELECTEDVALUE ( '** Period Create'[Period] )
VAR selectcontrib =
SELECTEDVALUE ( '** Contributor'[Contrib] )
VAR periodq =
VALUE ( MID ( SELECTEDVALUE ( '** Period Create'[Period] ), 2, 1 ) )
VAR Q1_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
FILTER (
'CX Cloud Pipeline',
'CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1"
)
)
VAR Q2_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
FILTER (
'CX Cloud Pipeline',
'CX Cloud Pipeline'[DME Handover Quarter] = BLANK ()
&& 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022
)
)
VAR FY_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
FILTER (
'CX Cloud Pipeline',
'CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1"
|| ( 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022 )
)
)
VAR Q1 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
FILTER (
'CX Cloud Pipeline',
'CX Cloud Pipeline'[Creation Quarter] = "2022-Q1"
)
)
VAR Q2 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
FILTER (
'CX Cloud Pipeline',
'CX Cloud Pipeline'[Creation Quarter] = "2022-Q2"
)
)
VAR FY =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
FILTER ( 'CX Cloud Pipeline', 'CX Cloud Pipeline'[Creation Year] = 2022 )
)
VAR R4Q =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
FILTER (
'CX Cloud Pipeline',
'CX Cloud Pipeline'[Closing Quarter] = "2022-Q2"
|| 'CX Cloud Pipeline'[Closing Quarter] = "2022-Q3"
|| 'CX Cloud Pipeline'[Closing Quarter] = "2022-Q4"
|| 'CX Cloud Pipeline'[Closing Quarter] = "2023-Q1"
)
)
RETURN
SWITCH (
TRUE (),
selectperiod = "R4Q", R4Q,
selectperiod = "Q122"
&& selectcontrib = "DME", Q1_DME,
selectperiod = "Q222"
&& selectcontrib = "DME", Q2_DME,
selectperiod = "FY22"
&& selectcontrib = "DME", FY_DME,
selectperiod = "Q122"
&& selectcontrib <> "DME", Q1,
selectperiod = "Q222"
&& selectcontrib <> "DME", Q2,
selectperiod = "FY22"
&& selectcontrib <> "DME", FY
)
Solved! Go to Solution.
I'Estoy molesto debido a la tabla de horas de fecha automática detrás de [Fecha de entrada de fase] . Mejor si tuviera una tabla de fechas adecuada o un coulmn simple para el trimestre como lo tiene para la columna [DME Handover Quarter]
De nuevo, sin mirar tu modelo,'En realidad, estoy guiñando por su código cómo se ve, así que pruebe esto:
Contrib FlexQ SUMMARY =
VAR selectperiod =
SELECTEDVALUE ( '** Period Create'[Period] )
VAR selectcontrib =
SELECTEDVALUE ( '** Contributor'[Contrib] )
VAR periodq =
VALUE ( MID ( selectperiod, 2, 1 ) )
VAR Q1_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1")
)
VAR Q2_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS(
FILTER(
SUMMARIZE(
ALL('CX Cloud Pipeline'),
'CX Cloud Pipeline'[DME Handover Quarter],
'CX Cloud Pipeline'[Phase Since Date].[QuarterNo],
'CX Cloud Pipeline'[Phase Since Date].[Year]
),
'CX Cloud Pipeline'[DME Handover Quarter] = BLANK ()
&& 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022
)
)
)
VAR FY_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS(
FILTER(
SUMMARIZE(
ALL('CX Cloud Pipeline'),
'CX Cloud Pipeline'[DME Handover Quarter],
'CX Cloud Pipeline'[Phase Since Date].[QuarterNo],
'CX Cloud Pipeline'[Phase Since Date].[Year]
),
'CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1"
|| ( 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022 )
)
)
)
VAR Q1 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Quarter] = "2022-Q1")
)
VAR Q2 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Quarter] = "2022-Q2")
)
VAR FY =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Year] = 2022 )
)
VAR R4Q =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Closing Quarter] IN { "2022-Q2", "2022-Q3", "2022-Q4", "2023-Q1"} ))
RETURN
SWITCH (
TRUE (),
selectperiod = "R4Q", R4Q,
selectperiod = "Q122"
&& selectcontrib = "DME", Q1_DME,
selectperiod = "Q222"
&& selectcontrib = "DME", Q2_DME,
selectperiod = "FY22"
&& selectcontrib = "DME", FY_DME,
selectperiod = "Q122"
&& selectcontrib <> "DME", Q1,
selectperiod = "Q222"
&& selectcontrib <> "DME", Q2,
selectperiod = "FY22"
&& selectcontrib <> "DME", FY
)
I'Estoy molesto debido a la tabla de horas de fecha automática detrás de [Fecha de entrada de fase] . Mejor si tuviera una tabla de fechas adecuada o un coulmn simple para el trimestre como lo tiene para la columna [DME Handover Quarter]
De nuevo, sin mirar tu modelo,'En realidad, estoy guiñando por su código cómo se ve, así que pruebe esto:
Contrib FlexQ SUMMARY =
VAR selectperiod =
SELECTEDVALUE ( '** Period Create'[Period] )
VAR selectcontrib =
SELECTEDVALUE ( '** Contributor'[Contrib] )
VAR periodq =
VALUE ( MID ( selectperiod, 2, 1 ) )
VAR Q1_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1")
)
VAR Q2_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS(
FILTER(
SUMMARIZE(
ALL('CX Cloud Pipeline'),
'CX Cloud Pipeline'[DME Handover Quarter],
'CX Cloud Pipeline'[Phase Since Date].[QuarterNo],
'CX Cloud Pipeline'[Phase Since Date].[Year]
),
'CX Cloud Pipeline'[DME Handover Quarter] = BLANK ()
&& 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022
)
)
)
VAR FY_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS(
FILTER(
SUMMARIZE(
ALL('CX Cloud Pipeline'),
'CX Cloud Pipeline'[DME Handover Quarter],
'CX Cloud Pipeline'[Phase Since Date].[QuarterNo],
'CX Cloud Pipeline'[Phase Since Date].[Year]
),
'CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1"
|| ( 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022 )
)
)
)
VAR Q1 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Quarter] = "2022-Q1")
)
VAR Q2 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Quarter] = "2022-Q2")
)
VAR FY =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Year] = 2022 )
)
VAR R4Q =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Closing Quarter] IN { "2022-Q2", "2022-Q3", "2022-Q4", "2023-Q1"} ))
RETURN
SWITCH (
TRUE (),
selectperiod = "R4Q", R4Q,
selectperiod = "Q122"
&& selectcontrib = "DME", Q1_DME,
selectperiod = "Q222"
&& selectcontrib = "DME", Q2_DME,
selectperiod = "FY22"
&& selectcontrib = "DME", FY_DME,
selectperiod = "Q122"
&& selectcontrib <> "DME", Q1,
selectperiod = "Q222"
&& selectcontrib <> "DME", Q2,
selectperiod = "FY22"
&& selectcontrib <> "DME", FY
)
Hola @SpartaBI, ahora usando esta medida en una tabla, tengo que agregar un filtro visual para "la medida no está en blanco" ya que la tabla devuelve todas las filas, solo con un valor en blanco donde la medida no está en el alcance.
¿Tienes alguna idea de cómo evitar eso sin usar el filtro visual? Me doy cuenta de que podría haber una mejor manera.
Muchas gracias de nuevo
No estoy seguro de entender lo que está experimentando, pero puede intentar reemplazar las funciones 'ALL' con 'ALLNOBLANKROW'. Tal vez eso haga el truco
Aquí hay un ejemplo que usa esa medida en una tabla: supongo que es porque solo está tirando solo de la tabla y agregar la medida en la parte superior no le dice a powerbi que solo muestre las filas donde la medida no está vacía.
¿Es esa la única medida en su tabla? ¿Qué es el icono de enlace allí? Es otro valor de url de una medida differnet, ¿verdad? En caso afirmativo, que no es culpa de nuestra medida, ve esa fila, y sí, debe usar ese filtro de nivel visual o filtrar todas las demás medidas para dejar en blanco cuando nuestra medida está en blanco. Es difícil saber qué opción será mejor 🙂
@qmartiny Lo hice muy rápido y no puedo verificar el código de control de calidad, pero pruebe esto 🙂
Contrib FlexQ SUMMARY =
VAR selectperiod =
SELECTEDVALUE ( '** Period Create'[Period] )
VAR selectcontrib =
SELECTEDVALUE ( '** Contributor'[Contrib] )
VAR periodq =
VALUE ( MID ( selectperiod, 2, 1 ) )
VAR Q1_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1")
)
VAR Q2_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS(
FILTER(
ALL(
'CX Cloud Pipeline'[DME Handover Quarter],
'CX Cloud Pipeline'[Phase Since Date].[QuarterNo],
'CX Cloud Pipeline'[Phase Since Date].[Year]
),
'CX Cloud Pipeline'[DME Handover Quarter] = BLANK ()
&& 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022
)
)
)
VAR FY_DME =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS(
FILTER(
ALL(
'CX Cloud Pipeline'[DME Handover Quarter],
'CX Cloud Pipeline'[Phase Since Date].[QuarterNo],
'CX Cloud Pipeline'[Phase Since Date].[Year]
),
'CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1"
|| ( 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2
&& 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022 )
)
)
)
VAR Q1 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Quarter] = "2022-Q1")
)
VAR Q2 =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Quarter] = "2022-Q2")
)
VAR FY =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Creation Year] = 2022 )
)
VAR R4Q =
CALCULATE (
SUM ( 'CX Cloud Pipeline'[acv €] ),
KEEPFILTERS('CX Cloud Pipeline'[Closing Quarter] IN { "2022-Q2", "2022-Q3", "2022-Q4", "2023-Q1"} )
RETURN
SWITCH (
TRUE (),
selectperiod = "R4Q", R4Q,
selectperiod = "Q122"
&& selectcontrib = "DME", Q1_DME,
selectperiod = "Q222"
&& selectcontrib = "DME", Q2_DME,
selectperiod = "FY22"
&& selectcontrib = "DME", FY_DME,
selectperiod = "Q122"
&& selectcontrib <> "DME", Q1,
selectperiod = "Q222"
&& selectcontrib <> "DME", Q2,
selectperiod = "FY22"
&& selectcontrib <> "DME", FY
)
Incluso si me perdí algo, creo que verás el problema principal:
Cambié todos sus filtros de ejecutar sus filtros en todas las tablas (BIG NO NO 😄) a solo ejecutarlos en las columnas que usó para las condiciones.
Déjame saber cómo fue
¡Muchas gracias por investigar esto!
Recibo el error "Todos los argumentos de columna de la función ALL/ALLNOBLANKROW/ALLSELECTED deben ser de la misma tabla".
ACTUALIZAR:
Aparece un error en el FY_DME.
ACTUALIZACIÓN 2 :
Incluso eliminar esto parece arrojar un error de todos modos. Sin embargo, la lógica parece estar bien
VAR FY_DME = CALCULATE ( SUM ( 'CX Cloud Pipeline'[acv €] ), KEEPFILTERS( FILTER( ALL( 'CX Cloud Pipeline'[DME Handover Quarter], 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo], 'CX Cloud Pipeline'[Phase Since Date].[Year] ), 'CX Cloud Pipeline'[DME Handover Quarter] = "2022-Q1" || ( 'CX Cloud Pipeline'[Phase Since Date].[QuarterNo] = 2 && 'CX Cloud Pipeline'[Phase Since Date].[Year] = 2022 ) ) ) )
Le agradezco si tiene algún pensamiento. Seguiré mirando a mi lado.
Que tengas un gran día
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |