error naturalleftjoin DAX al menos una columna de combinación común

Un usuario Pregunto ✅

ahuhn

Tengo dos tablas. Estoy tratando de realizar una NATURALLEFTOUTERJOIN juntas sin la columna común, ‘nombre’, pero recibo un error.

‘No se detectaron columnas de combinación comunes. La función de unión ‘NATURALLEFTOUTERJOIN’ requiere al menos una columna de unión común.’

Mi fórmula DAX es: MSTable = NATURALLEFTOUTERJOIN(‘Ahora’, ‘Antes’)

Imagen1.png

¿Alguna sugerencia de por qué? La documentación (https://msdn.microsoft.com/en-us/query-bi/dax/naturalleftouterjoin-function-dax) dice:

una unión interna de una tabla con otra tabla. Las tablas se unen en columnas comunes (por nombre) en las dos tablas. Si las dos tablas no tienen nombres de columnas comunes, se devuelve un error.’

Si creo una conexión entre ‘Ahora’ y ‘Antes’, aparece el siguiente error:

‘La columna » en la tabla » contiene valores en blanco y esto no está permitido para columnas en un lado de una relación de muchos a uno o para columnas que se usan como clave principal de una tabla.’

¿Alguna sugerencia de por qué ocurre esto?

Encontré la otra forma de hacer esto sin escribir DAX: puede ir a Modelado -> Combinar consultas como nuevas, elegir unirlas como unión interna. Esto creará una nueva tabla para usted.imagen.png

ngank03_0-1637734088554.png

TimoRikonen

Agreguemos un par de requisitos más a la lista de @Chihiro:

1. La relación entre la(s) columna(s) que define(n) la combinación debe establecerse antes de poder usar la función.

2. La columna relacionada debe tener un nombre diferente entre dos tablas que se unen.

3. Las combinaciones naturales no funcionan para DirectQueries. Entonces necesitas usar CrossJoin en su lugar. Recuerde cambiar el nombre de las columnas coincidentes de manera diferente entre sí.
4. DirectQuery debe tener menos de un millón de filas.

Amit2019

Hola ahuhn,

Puede escribir en mayúsculas explícitamente en Power Query para la columna común, es decir, en el momento de cargar los datos usando la fórmula M.

O

A continuación se muestra la solución que puedo pensar y sugerir su. Si NATURALJOIN no puede hacer coincidir los tipos de columnas para la columna común en la tabla «AHORA» y «ANTES», debe hacer que el tipo de datos sea compatible explícitamente.

A continuación se muestra la solución:

Suponiendo que la columna común sea «Nombre» y que la relación esté en su lugar.

NATURALINNERJOIN(

SELECCIONAR COLUMNAS(‘AHORA’,»Nombre»,AHORA[name]&»», ) ,

SELECTCOLUMNS( ‘ANTES’,»Nombre»,ANTES[name]&»»,

)

Espero que debería resolver este problema.

Gracias,

Amit Dhiman

quinnp

En respuesta a Amit2019

Un problema que tuve con esto es que estaba intentando usar una unión natural en una tabla temporal dentro de una medida y otra tabla. Tuve que hacer todas mis uniones como primer paso, porque una vez que se creaba una tabla temporal, se perdía la relación que tenían las tablas originales en las que se realizaría la unión natural.

¡Espero que esto ayude a cualquiera en una situación similar!

Anónimo

En respuesta a quinnp

Estoy teniendo el mismo problema aquí.
Tengo una tabla de series de tiempo estática que se parece a esta Fecha, ID, Valor
Necesito «filtrarlo» en 2 tablas usando los puntos finales de una cortadora.
SData y EData son el resultado de este filtrado usando CalculateTable.
Ambos obtienen sus respectivos puntos de datos y nada más.
Luego necesito usar «unión completa» tanto en SData como en EData usando ID como punto de unión.
Aquí es donde me tropecé.
Ciertamente, podría hacer esto en SQL fácilmente, pero necesito un aspecto dinámico de lo anterior si funciona.

Chihiro

Debe tener columnas que definan uniones con nombres diferentes.

Es contrario a la intuición, pero para que la función funcione.

1. La relación entre la(s) columna(s) que define(n) la combinación debe establecerse antes de poder utilizar la función.

2. La columna relacionada debe tener un nombre diferente entre dos tablas que se unen.

Deja un comentario

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