Crear matriz (lista) con DAX

Un usuario Pregunto ✅

Sam_85

Hola,

tengo diferentes clientes [Column] en diferentes años [Column]. Ahora quiero crear una nueva tabla, supongo, con el cliente y una matriz que incluya los años como este «2017, 2018, 2019» o «2017, 2019». Solo si el cliente estuvo activo en un año, quiero obtener los años en una fila.

¿Es algo así posible?

Gracias un cordial saludo.

Sam

Anónimo

En respuesta a Sam_85

Coloque este código M en el Editor avanzado en PQ y ejecútelo. Verás cómo se hace.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wci4tLjFU0lEyMjAwUIrVgQgYoQtAVBiiq0ASMEbXYoxdhRG6ocYIAROIGUboAsZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Customer = _t, Year = _t]),
    #"Grouped Rows" = Table.Group(Source, {"Customer"}, {{"AllCustYears", each _, type table [Customer=text, Year=text]}}),
    #"Added Custom2" = Table.AddColumn(#"Grouped Rows", "OnlyYears", each [AllCustYears][Year]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"AllCustYears"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns", "Years", each Text.Combine([OnlyYears], ",")),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"OnlyYears"})
in
    #"Removed Columns1"

Mejor

D

Anónimo

¿No es un trabajo fácil para Power Query?

Mejor
D

Sam_85

En respuesta a Anónimo

Hola cariño,

Supongo que es fácil con M, pero no para un simple usuario como yo :). ¿Qué fórmula debo usar para realizar la salida en power query?

Anónimo

En respuesta a Sam_85

Coloque este código M en el Editor avanzado en PQ y ejecútelo. Verás cómo se hace.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wci4tLjFU0lEyMjAwUIrVgQgYoQtAVBiiq0ASMEbXYoxdhRG6ocYIAROIGUboAsZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Customer = _t, Year = _t]),
    #"Grouped Rows" = Table.Group(Source, {"Customer"}, {{"AllCustYears", each _, type table [Customer=text, Year=text]}}),
    #"Added Custom2" = Table.AddColumn(#"Grouped Rows", "OnlyYears", each [AllCustYears][Year]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"AllCustYears"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns", "Years", each Text.Combine([OnlyYears], ",")),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"OnlyYears"})
in
    #"Removed Columns1"

Mejor

D

Sam_85

En respuesta a Anónimo

Hola @Anonimo,

Traté de entrar en esto

 Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wci4tLjFU0lEyMjAwUIrVgQgYoQtAVBiiq0ASMEbXYoxdhRG6ocYIAROIGUboAsZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Customer = _t, Year = _t]),

pero necesito esto en su totalidad?

¿De dónde viene ese «AllCustYears»?

#"Grouped Rows" = Table.Group(Source, {"Customer"}, {{"AllCustYears", each _, type table [Customer=text, Year=text]}}),
    #"Added Custom2" = Table.AddColumn(#"Grouped Rows", "OnlyYears", each [AllCustYears][Year]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"AllCustYears"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns", "Years", each Text.Combine([OnlyYears], ",")),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"OnlyYears"})

Anónimo

En respuesta a Sam_85

Amigo, esta es una demostración de cómo debería funcionar en M. Tomas esto, lo inspeccionas, lo entiendes y luego lo aplicas a tu modelo.

Mejor
D

Sam_85

En respuesta a Anónimo

@Anónimo

gracias, supongo que me meto en eso. Quedan 2 preguntas.

para evitar que se eliminen todas las demás columnas, ¿debo agregarlas a {«KundeID»}?

    #"Group" 				= Table.Group(#"Add Column 2", {"KundeID"}, {{"GroupYear", each _, type table [KundeID=text, Jahr=text]}}),

Y hasta ahora todo bien. ¿Hay alguna forma de reducir el resultado por fila a un valor distinto? Pic.PNG

Gracias de antemano.

saludos sam

Anónimo

En respuesta a Sam_85

Hola.

No. Debe crear una referencia a la tabla original, eliminar los duplicados de acuerdo con sus reglas, luego realizar la agregación como se indicó anteriormente y luego volver a unirse a la tabla original seleccionando las columnas que desee.

Lo mejor es aprender algo sobre Power Query.

Mejor
D

Sam_85

En respuesta a Anónimo

@Anónimo

Jeah, lo hice, creé una segunda tabla (en Excel, necesitaba hacer otra consulta), eliminé todas las columnas excepto Cliente y Año, distinguí con ambas columnas. Entonces use su fórmula y funcionó perfectamente (no olvide establecer una relación).

    #"Andere entfernte Spalten" = Table.SelectColumns(#"Add Column 2",{"KundeID", "Jahr"}),
    #"Entfernte Duplikate"      = Table.Distinct(#"Andere entfernte Spalten"),
    #"Group" 			= Table.Group(#"Entfernte Duplikate", {"KundeID"}, {{"GroupYear", each _, type table [KundeID=text, Jahr=text]}}),
    #"Add Custom 1" 		= Table.AddColumn(#"Group", "OnlyYears", each [GroupYear][Jahr]),
    #"Removed Column 1" 	= Table.RemoveColumns(#"Add Custom 1",{"GroupYear"}),
    #"Add Custom 2" 		= Table.AddColumn(#"Removed Column 1", "Jahre", each Text.Combine([OnlyYears], ",")),
    #"Removed Column 2" 	= Table.RemoveColumns(#"Add Custom 2",{"OnlyYears"})

Muchas gracias por esos consejos :).

mariusz

Hola @Sam_85

Puedes usar CONCATINATEX()

CONCATENATEX( <table>, <expression>, [delimiter] )  

https://docs.microsoft.com/en-us/dax/concatenatex-function-dax

Atentamente,
mariusz

Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución.

Por favor, siéntase libre de conectarse conmigo.
LinkedIn

Sam_85

En respuesta a mariusz

Hola @Mariusz,

probé esta fórmula pero con 4 millones de filas, funciona muy, muy lento (no terminó en absoluto después de 30 minutos). ¿Qué está pasando en esta fórmula? ¿Y es más capaz que la Fórmula M cuando se trata de rendimiento?

mariusz

En respuesta a Sam_85

Hola @Sam_85

Puedo imaginar que será, la solución de consulta de energía @Anonymous probablemente será una mejor opción

Atentamente,
mariusz

Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución.

Por favor, siéntase libre de conectarse conmigo.
LinkedIn

Deja un comentario

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