This is best Fabric, Power BI, SQL and AI community event. How do we know? The last event sold out! Save €200 with code FABCMTY200.
Register nowA new Data Days event is coming soon! This time we’re going bigger than ever. Fabric, Power BI, SQL, AI and more. Don't miss out.
Tengo una tabla de fechas. Y una tabla de CRM (que sale de Salesforce). Tenemos una versión básica de SF, por lo que no tenemos el lujo de tener un tipo de instantánea de datos integrados en Salesforce.
Así que en un lenguaje sencillo, esto es lo que estoy tratando de hacer.
A medida que una oportunidad cambia de una etapa u otra, o incluso permanece en la misma etapa pero se aleja más en el tiempo, necesito poder rastrear la fecha original de "cierre", a cualquier fecha de cierre posterior. Tengo "instantáneas" mensuales históricas que combino cada mes de las exportaciones de SF que llegan automáticamente por correo electrónico. Así que en teoría
Fecha del archivo de instantánea de Excel (llega al final de cada mes) Nombre de oportunidad Crear fecha de cierre estimada
En última instancia, estamos tratando de averiguar los días entre la fecha de creación y cierre estimada, pero también los días transcurridos entre cada cambio.
Fecha del archivo de instantánea de Excel (llega al final de cada mes) Nombre de oportunidad Crear fecha de cierre estimada
Archivo histórico
Dic (supongamos que esta es la primera vez que aparece) Big Opp 1 Dic 9
Jan Big Opp 1 3 de marzo
Feb Big Opp 1 23 de marzo
Mar Big Opp 1 6 de abril
Entonces, usando el ejemplo anterior, nuestro vendedor estimó en el Pronóstico de Enero (que llega el último día de diciembre) que la oportunidad se cerraría el 3 de marzo. Cuando salió el siguiente pronóstico de febrero (el 31 de enero), la fecha había cambiado a una fecha de cierre del 23 de marzo. Luego, en el pronóstico de marzo (enviado el último día de febrero), la fecha de cierre estimada cambió nuevamente al 6 de abril.
Como puede ver, el archivo de pronóstico se envía el último día de cada mes, pero es para los meses siguientes.
Estamos tratando de determinar la cantidad de días entre cada turno, a partir de la instancia original de la oportunidad. Y los días entre las fechas de cierre estimadas en cada archivo de instantánea. Cualquier idea para comenzar en la dirección correcta es apreciada.
@lbendlin Pozo... es posible que me hayas volado la cabeza. Nosotros en nuestra empresa somos todos nuevos en SF y las diversas tablas que están en el esquema. ¿Estás diciendo que tal vez haya algún tipo de marca de tiempo, para cada oportunidad en particular (y las etapas por las que pasó)? Lo veo en nuestros flujos de datos, y lo he llevado a Power Bi hace un momento. ¿Simplemente no estoy seguro de lo que estoy buscando?
Esta mesa es lo mejor desde el pan de molde. Le permite reconstruir el estado de cualquier oportunidad en cualquier momento, sin la necesidad de costosas instantáneas. De esto se trata el informe basado en eventos.
Requiere un poco de trabajo fuera de SFDC (extraemos los datos en una tabla de SQL Server y ejecutamos una pequeña función escalar sobre ella), pero le brinda la máxima flexibilidad y usuarios satisfechos. Puede mostrar el código si está interesado.
@lbendlin Muy interesante, y sí, he jugado un poco con esa mesa desde que me ayudaste a descubrirla. Lo traemos a PBi desde un flujo de datos, pero nunca lo hemos usado. Tengo curiosidad por saber si tiene algún código DAX o tal vez código M que haya utilizado como ejemplo para contar los días entre oportunidades y sus etapas.
Lo implementamos como una función de valor escalar en SQL, después de extraer la tabla incrementalmente de SFDC a SQL.
CREATE FUNCTION [SFDC].[OpportunityStatus]
(
@ID as varchar(20) -- opportunity id. Case sensitive, use CS_AS collation for storage
,@TimeStamp as datetime -- point in time for which the status is requested
,@CreatedDate as datetime -- opportunity created date (in case the request is for a date where the opportunity did not exist)
,@Field as varchar(50) -- attribute that the status is requested for ( for example "Forecast Category" )
,@CurrentValue as varchar(255) -- current value of the requested attribute (in case there was no change)
)
RETURNS varchar(255)
AS
BEGIN
DECLARE @TimeStampValue as varchar(255) -- computed value of the attribute at the requested time
SELECT @TimeStampValue=
-- return NULL when the opportunity was not alive at the time
case when @TimeStamp < @CreatedDate then NULL
-- any change data before the timestamp? [Edit Date] desc or [History ID] ?
else isnull((SELECT TOP 1 [New Value] FROM [sfdc].[OpportunityFieldChanges]
WHERE [Opportunity Id] = AND [Field Event] = AND [Edit Date] <= @TimeStamp
order by [Edit Date] desc, [History ID] COLLATE SQL_Latin1_General_CP437_BIN )
-- any change data after the timestamp?
,isnull((SELECT TOP 1 [Old Value] FROM [sfdc].[OpportunityFieldChanges]
WHERE [Opportunity Id] = AND [Field Event] = AND [Edit Date] > @TimeStamp
order by [Edit Date],[History ID] COLLATE SQL_Latin1_General_CP437_BIN desc)
-- use the current data from SFDC if no changes have been recorded
,@CurrentValue))
end
RETURN @TimeStampValue
END
No estoy seguro de si probar esto en DAX o M es una buena idea: el rendimiento podría verse afectado. Pero la idea básica sería la misma.
Una vez que esté en su lugar, puede hacer análisis increíbles: probabilidades de conversión, tiempo dedicado por etapa de ventas, "nerviosismo" de cambios de fecha de cierre, etc., etc.
¿Está diciendo que su instancia sfDC no tiene habilitado el historial de campo de oportunidades? Eso sería muy lamentable.
Check out the May 2026 Power BI update to learn about new features.
Sign up to receive a private message when registration opens and key events begin.
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.