Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

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.

Reply
Anonymous
Not applicable

Nueva tabla basada en la combinación de valores de columna de tablas existentes

Hola a todos,

Tengo un modelo bastante grande utilizado para construir un informe de pérdidas y respuestas para uno de mis clientes (entre otras cosas). Quiero combinar 3 tablas existentes en una usando DAX, y agregar columnas para 6 medidas para cada combinación única de ID de empresa, ID de cuenta y Período. Las columnas que me interesan de las tablas existentes tienen este aspecto:

ID de empresa
1
2
3
4
etc. etc. (26 empresas)

ID de cuenta
F0001_3000
F0001_3001
F0001_3002
F0001_3010
etc., etc. (basado en un plan de cuentas estandarizado; similar para cada empresa, pero el nombre de las cuentas puede diferir)

Período (aaaamm)
201801
201802
201803
201804
etc. etc. (ahora mismo la tabla de fechas va hasta diciembre de 2020)

Resultado esperado/deseado:

ID de empresaID de cuentaPeríodoMedida 1Medida 2Medida 3Medida 4Medida 5Medida 6
1F0001_3000201801AaaEeeMmmQqqUuu
1F0001_3001201801BbbFffJjjNnnRrrVvv
1F0001_3002201801CccGggKkkOooSssWww
1F0001_3010201801DddHhhLllPppTttXxx
...........................

He intentado unir las 3 tablas usando CROSSJOIN (VALUES() ) ya que no están relacionadas entre sí en el modelo, y esto casi me da lo que quiero. La trampa, sin embargo, es que mi cliente es un grupo formado por 26 empresas, pero no tengo 26 tablas individuales de 'Cuentas'. Más bien he combinado todas las tablas de cuentas relevantes del sistema ERP en una tabla grande que consta de más de 7000 filas. Esto no se tiene en cuenta cuando el motor obtiene la lista de valores únicos de la columna 'Cuentas'[ID de cuentas], lo que significa que combina todos los 7000 ID de cuenta con los 26 ID de empresa. No quiero todo eso, sin embargo, y así mi pregunta es esta:


¿Hay alguna manera de combinar el ID de cada empresa con solo los ID de cuenta relevantes para esa empresa específica, dado que solo tengo acceso a una tabla de cuentas para las 26 empresas? ¿Y cómo puedo asegurarme de que todavía puedo agregar una columna para cada una de las 6 medidas que mencioné? (la última parte es menos importante en este momento)

Toda la ayuda es muy apreciada 🙂

1 ACCEPTED SOLUTION

@girlsintech - OK, asegúrese de que hay una relación entre la tabla de la empresa y la tabla de cuentas y entonces usted debe ser capaz de hacer esto:

Table = 
  GENERATE(
    GENERATE('Companies', SELECTCOLUMNS(RELATEDTABLE(Accounts),"Accounts ID",[Accounts ID])),
    'Periods'
  )

El GENERATE interno creará el producto cartesiano de las empresas y sus cuentas relacionadas. A continuación, la generación externa utilizará esto para crear un producto cartesiano del resultado de la tabla interna GENERATE y la tabla de períodos.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

View solution in original post

11 REPLIES 11
Greg_Deckler
Super User
Super User

@girlsintech - Creo que podrías hacerlo en DAX así:

Tabla: GENERATE(GENERATE(DISTINCT('Table1'[Column]),DISTINCT('Table2'[Column]),DISTINCT('Table3'[Column]))


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
Anonymous
Not applicable

@Greg_Deckler - gracias por la sugerencia, pero usando ese código todavía me enfrento a los mismos problemas que describí en mi post original.
DISTINCT( 'Accounts'[Account ID] ) devuelve una lista de aproximadamente 7.000 cuentas, pero solo un subconjunto relativamente pequeño de esas cuentas son relevantes para cada empresa del grupo. Vea la captura de pantalla siguiente (en noruego) para obtener más detalles, aquí la columna de ID de empresa se filtra para incluir solo la #1 de la empresa. Puede ver que la columna de ID de cuentas incluye valores relacionados con la empresa #123, que es lo que no quiero (el "F0" delante de 123 es sólo un prefijo del sistema ERP):

"Selskap" means company, "Konto" means account, and "periode" is period"Empresa" significa empresa, "Cuenta" significa cuenta, y "período" es período

@girlsintech - OK, ¿hay una columna en la tabla Cuentas que tenga a qué empresa pertenece?


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
Anonymous
Not applicable

@Greg_Deckler - Sí, lo hay. Sin embargo, no hay ninguna columna para el período en la tabla Cuentas.

@girlsintech - OK, asegúrese de que hay una relación entre la tabla de la empresa y la tabla de cuentas y entonces usted debe ser capaz de hacer esto:

Table = 
  GENERATE(
    GENERATE('Companies', SELECTCOLUMNS(RELATEDTABLE(Accounts),"Accounts ID",[Accounts ID])),
    'Periods'
  )

El GENERATE interno creará el producto cartesiano de las empresas y sus cuentas relacionadas. A continuación, la generación externa utilizará esto para crear un producto cartesiano del resultado de la tabla interna GENERATE y la tabla de períodos.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
Anonymous
Not applicable

@Greg_Deckler - gracias, que funcionó (con algunas modificaciones menores a su código para obtener sólo las columnas que me interesan de cada tabla)! 😃

Aquí está mi código final si alguien está interesado (traducido al inglés para su conveniencia):

Test_table v3 ?
GENERAR(
GENERAR(
DISTINCT( 'Empresas'[ID de empresa] ),
SELECTCOLUMNS(
RELATEDTABLE( 'Cuentas'),
"ID de cuenta", 'Cuentas'[ID de cuenta]
)
),
DISTINCT( 'Fecha'[Período] )
)

@girlsintech - Impresionante, ¡me alegro de que lo hayas conseguido!


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Hola , @girlsintech

¿Puede compartir más datos de muestra de su "Tabla de cuentas"?

Saludos
Equipo de soporte de la comunidad _ Eason

amitchandak
Super User
Super User

@girlsintech, no lo he hecho, pero se puede poner un filtro en la combinación cruzada superior para que coincida con algunos datos.

Esto también puede ayudarle a https://www.sqlbi.com/articles/from-sql-to-dax-joining-tables/

Pragati11
Super User
Super User

Hola @girlsintech ,

No estoy seguro de por qué está tratando de lograr esto usando DAX. Puede hacerlo fácilmente en el Editor de consultas combinando estas 3 tablas en las columnas comunes.

Gracias

Pragati

Best Regards,

Pragati Jain


MVP logo


LinkedIn | Twitter | Blog YouTube 

Did I answer your question? Mark my post as a solution! This will help others on the forum!

Appreciate your Kudos!!

Proud to be a Super User!!

Anonymous
Not applicable

Hola @Pragati11,

Soy consciente de eso, pero como dije en mi post original las tablas no están relacionadas entre sí. Lo que quiero decir con eso es que no hay columnas comunes obvias. Las tablas son todas las dimensiones conectadas a una tabla de hechos 'Ledger general', así como una tabla de hechos "Presupuesto".

Mi objetivo al hacerlo es mejorar el rendimiento de una visualización de matriz en mi informe. He intentado implementar variables en mi código DAX sin ningún efecto perceptible y ahora estoy tratando de cambiar mi modelo para ver si eso ayudará.

¡Gracias de todos modos!

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.