Comparar valores de una columna en la misma tabla

Un usuario Pregunto ✅

hackfifi

¡Buenos días!

Tengo la siguiente tabla de datos de muestra / consulta «Detalle«. Me gustaría lograr la imagen de una tabla que se muestra a continuación («Resultado Esperado«) para comparar / conciliar valores entre dos Proyectos. Puedo desarrollar fácilmente una» Matriz Visual «que muestre solo los valores, pero no puedo averiguar cómo calcular el» Delta «.

También tenga en cuenta que «Proyecto» y «Tipo» son además Tablas «clave» que tiene una relación con la tabla «Detalle». El usuario debe «sólo» seleccionar dos proyectos. Hay más de 100 proyectos. ¡Saludos de antemano!

Query.GIF

Greg_Deckler

En respuesta a hackfifi

@hackfifi Ah, los detalles son importantes. Querrá dos tablas de proyecto desconectadas. Puedes crearlos usando este código:

ProjectSlicerTable1 = DISTINCT('Table'[Project])

ProjectSlicerTable2 = DISTINCT('Table'[Project])

Úselos para sus rebanadoras. El código se convierte en:

Delta measure =
  VAR __Type = MAX('Table'[Type])
  VAR __Compare1 = MAX('ProjectSlicerTable1'[Project])
  VAR __Compare2 = MAX('ProjectSlicerTable2'[Project])
  VAR __A = SUMX(FILTER('Table',[Type]=__Type && [Project] = __Compare1),[Value])
  VAR __B = SUMX(FILTER('Table',[Type]=__Type && [Project] = __Compare2),[Value])
RETURN
  __B - __A

bchager6

Recreé su tabla de datos y la guardé como Book12.xlsx y realicé la siguiente transformación en el editor de consultas.

dejar
Fuente = Excel.Workbook (File.Contents («C: Book12.xlsx»), nulo, verdadero),
Sheet1_Sheet = Fuente {[Item=»Sheet1″,Kind=»Sheet»]}[Data],
# «Encabezados promocionados» = Table.PromoteHeaders (Sheet1_Sheet, [PromoteAllScalars=true]),
# «Tipo modificado» = Table.TransformColumnTypes (# «Encabezados promocionados», {{«Proyecto», escriba texto}, {«Tipo», escriba texto}, {«Valor», Int64.Tipo}}),
# «Columna dinámica» = Table.Pivot (# «Tipo cambiado», List.Distinct (# «Tipo cambiado»[Project]), «Proyecto», «Valor», List.Sum),
# «Valor reemplazado» = Table.ReplaceValue (# «Columna dinámica», nulo, 0, Reemplazo.ReplaceValue, {«A», «B», «C»}),
# «Columnas renombradas» = Table.RenameColumns (# «Valor reemplazado», {{«Tipo», «Proyecto»}}),
# «Columnas eliminadas» = Table.RemoveColumns (# «Columnas renombradas», {«C»}),
# «Agregado personalizado» = Table.AddColumn (# «Columnas eliminadas», «Delta (A vs B)», cada [B]-[A])
en
# «Añadido personalizado»

A continuación se muestra la tabla resultante.

bchager6_0-1631467235908.png

Espero que esto ayude.

hackfifi

En respuesta a bchager6

Gracias @ bchager6 – Desafortunadamente, no puedo modificar la tabla en Power query ya que tengo más de 100 proyectos. Solo proporcioné un conjunto de datos de muestra; y ya hay más de 70 columnas y hay muchas medidas basadas en la consulta de energía actual. Necesito calcular una «medida». Saludos de nuevo por tu tiempo.

Greg_Deckler

@hackfifi Parece algo como:

Delta (A vs B) measure =
  VAR __Type = MAX('Table'[Type])
  VAR __A = SUMX(FILTER('Table',[Type]=__Type && [Project] = "A"),[Value])
  VAR __B = SUMX(FILTER('Table',[Type]=__Type && [Project] = "B"),[Value])
RETURN
  __B - __A

hackfifi

En respuesta a Greg_Deckler

@Greg_Deckler Gracias por tomarse el tiempo para responder. Pero mi menú desplegable «Proyecto» (lista de más de 100 proyectos) sería dinámico, es decir, el usuario puede seleccionar CUALQUIERA dos de más de 100 proyectos. Acabo de proporcionar un conjunto de datos de muestra … el modelo de datos actual tiene más de 70 columnas.
No estoy seguro de si necesito tener dos tablas de proyectos … ¿para que el usuario pueda seleccionar un proyecto de cada filtro de «Proyecto»? es decir, seleccione el proyecto «A» y seleccione el proyecto «B»?

Greg_Deckler

En respuesta a hackfifi

@hackfifi Ah, los detalles son importantes. Querrá dos tablas de proyecto desconectadas. Puedes crearlos usando este código:

ProjectSlicerTable1 = DISTINCT('Table'[Project])

ProjectSlicerTable2 = DISTINCT('Table'[Project])

Úselos para sus rebanadoras. El código se convierte en:

Delta measure =
  VAR __Type = MAX('Table'[Type])
  VAR __Compare1 = MAX('ProjectSlicerTable1'[Project])
  VAR __Compare2 = MAX('ProjectSlicerTable2'[Project])
  VAR __A = SUMX(FILTER('Table',[Type]=__Type && [Project] = __Compare1),[Value])
  VAR __B = SUMX(FILTER('Table',[Type]=__Type && [Project] = __Compare2),[Value])
RETURN
  __B - __A

hackfifi

En respuesta a Greg_Deckler

Gracias amigo – Eso funcionó.

Saludos por tu ayuda

Deja un comentario

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