cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
Impactful Individual
Impactful Individual

DAX funciona como una columna De Cálculo, pero no como una Medida

¡Hola! Hemos detectado un problema desconocido.

Necesidad de calcular cuánto tiempo ha pasado desde que un Miembro fue invitado a un Programa. Pero mi pregunta no es sobre eso específicamente... mi pregunta es por qué el uso de DAX en una columna calculada funciona para cada caso, pero no una medida.

Código para la columna calculada:

=VAR	InvitationDate =
	CALCULATE(
		FIRSTNONBLANK(
			ProgramInvitations[CreatedDate],
			TRUE()
		),
		TREATAS(
			VALUES(ProgramInvitations[OrganizationMemberId]),
			OrganizationMembers[Id]
		)
	)
RETURN
	
DATEDIFF(
	InvitationDate,
	TODAY(),
	DAY
)


Código para la medida:

Days Since Sending Invite:=
VAR	InvitationDate =
	CALCULATE(
		FIRSTNONBLANK(
			ProgramInvitations[CreatedDate],
			TRUE()
		),
		TREATAS(
			VALUES(ProgramInvitations[OrganizationMemberId]),
			OrganizationMembers[Id]
		)
	)
RETURN
	
DATEDIFF(
	InvitationDate,
	TODAY(),
	DAY
)


Recorte de pantalla de la tabla ProgramInvitations tabla que necesito para obtener la fecha de...

Raw Data.png
Y un recorte de pantalla de la salida... los cuatro registros resaltados a continuación son los cuatro registros mostrados anteriormente.
Output.png

Lo que me parece muy extraño de la medida es que no es capaz de calcular un valor para los registros con un estado de "pendiente" (también falta un ID de perfil). Pero el mismo código funciona como una columna calculada. Las tablas no están directamente relacionadas (hay una relación inactiva) pero están indirectamente relacionadas a través de un par de otras tablas entre ellas.


Inicialmente intenté LOOKUPVALUE para recuperar la fecha, pero estaba obteniendo los mismos resultados. Así que me mudé a usar FIRSTNONBLANK y TREATAS.

Cualquier idea de por qué la medida no funciona, pero la columna sí se agradecería. Preferiría usar la medida, suponiendo que funcione. ¡Gracias! 😊

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted

Así que hice un poco más de investigación y reelaboré la medida. Esto produce exactamente el resultado previsto

Days Since Sending Invite:=
VAR	InvitationDate =
	FIRSTNONBLANK(
		ProgramInvitations[CreatedDate],
		SELECTEDVALUE(OrganizationMembers[Id])
	)
RETURN
	
DATEDIFF(
	InvitationDate,
	TODAY(),
	DAY
)

View solution in original post

6 REPLIES 6
Highlighted
Super User III
Super User III

Sin tener acceso al archivo PBIX esto es muy difícil de averiguar, pero tenga en cuenta que la medida se ve afectada por los filtros en el modelo, por lo que filtra desde el objeto visual, segmentaciones de datos, el panel de filtros, etc. Las columnas calculadas no lo son.

Estoy de acuerdo en que las medidas son el mejor camino, pero usted va a tener que anular los filtros implícitos que están afectando a la medida.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Highlighted

El modelo de datos no está en un archivo PBIX. Está en una base de datos de Analysis ServicesAnalysis Services muy grande llena de datos HIPAA, por lo que no puedo compartirlos.

El recorte de pantalla que publiqué se filtró por intervalo de fechas (1/1/2019 - hoy) y organización (para fines de prueba). Estoy 99% seguro de que no hay otros filtros, pero verificará el lunes.

Mencioné que había probado LOOKUPVALUE... durante el intento de averiguar por qué eso no funcionó me encontré con una publicación en este foro de alguien que tenía un problema similar. El problema de esa persona se debió a tener datos "incompletos" que impedían que la relación de la tabla A a la tabla C a través de la tabla B faltase en la tabla B. Faltan los que la medida no calculará el ID de perfil (que es el campo en el que se basa la relación con una tabla). Pero el uso de TREATAS se supone que imita una relación cuando una directa no existe, por lo que eso no debería importar. Y yo pensaría que eso perjudicaría la columna calculada más que la medida. ¿¿¿quizás??? 😀

Highlighted

La parte relevante del modelo de datos (entre estas dos tablas) es la siguiente:

  • Miembros de la organización relacionados con identidades (1:M, bidireccional), en IdentityID
  • Identidades relacionadas con ProfileRelationships (1:M, bidireccional), en IdentityID
  • ProfileRelationships to Profiles (M:1, bidireccional) en ProfileID
  • Perfiles para ProgramarInvitaciones (1:M, unidireccional uni(?)) en profile ID

Y como mencioné, hay una relación inactiva directamente entre los miembros de la organización y ProgramInvitations en OrganizationMemberID.

Highlighted

Acabo de confirmar que no hay filtros que no sean el rango de fechas y la organización

Highlighted

Ok, pero esos son filtros que no están en una columna calculada. Las columnas calculadas no tienen filtros implícitos, nunca. No pueden. Pero una medida siempre tiene que lidiar con esos, lo que suele ser algo bueno, pero en este caso, hay que eliminar los filtros procedentes del modelo según corresponda para conseguir que la medida funcione correctamente. Alguien más puede ser capaz de saltar y ayudar, pero es difícil de hacer sin un archivo PBIX o modelo para trabajar con. Se trata de un foro de Power BI y, aunque SSAS está debajo, gran parte del producto se oscurece de los usuarios de Power BI. Es posible que desee hacer esta pregunta en un foro que tiene usuarios SSAS que estarían acostumbrados a tratar con preguntas y cómo compartir modelos y datos para ayudar en la solución de problemas.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Highlighted

Así que hice un poco más de investigación y reelaboré la medida. Esto produce exactamente el resultado previsto

Days Since Sending Invite:=
VAR	InvitationDate =
	FIRSTNONBLANK(
		ProgramInvitations[CreatedDate],
		SELECTEDVALUE(OrganizationMembers[Id])
	)
RETURN
	
DATEDIFF(
	InvitationDate,
	TODAY(),
	DAY
)

View solution in original post

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

Community Conference

Microsoft Power Platform Communities

Check out the Winners!

secondImage

Create an end-to-end data and analytics solution

Learn how Power BI works with the latest Azure data and analytics innovations at the digital event with Microsoft CEO Satya Nadella.

Top Solution Authors