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
MarceloSaez
Helper I
Helper I

Resultado de variación de columna calculado para cada fila en función de las fechas y el elemento dentro de la misma tabla

¡Hola chicos! espero que lo estés haciendo todo bien.

Aquí hay uno complicado (al menos para mi conocimiento modesto):

Tengo un conjunto de artículos (pozos productores de petróleo - Pozo),y cada uno de ellos tiene un historial de producción de petróleo (Aceite producido - qoil, en cada mes - fechamensual). Así que mis datos se ven así:

Bien Date qoil
ME-0001 01/08/2020 1.5
ME-0001 01/09/2020 1.5
ME-0001 01/10/2020 1.4
ME-5000 01/08/2020 4.4
ME-5000 01/09/2020 4.0
ME-5000 01/10/2020 3.7
ME-3251 01/08/2020 0.2
ME-3251 01/09/2020 0.2
ME-3251 01/10/2020 0.2

(tenga en cuenta que esto es sólo una muestra, siendo los datos reales miles de pozos y todas las fechas desde la década de 1950 hasta la fecha actual).

La evolución de estas curvas de producción de petróleo suele seguir una forma exponencial, como la siguiente:

Matemáticamente hablando, esta curva se modela como:

Picture1.JPG

si en la fecha t0 --> qoil0 - Qo0

a continuación, en la siguiente fecha1 --> qoil1 - Qo0 x Exp (-ADN/12)

donde el ADN es la tasa de declinación nominal anual, que en la ecuación se divide por 12 porque el ADN es anual, y el período es en meses.

Mis datos se obtienen de las mediciones en un campo de petróleo, por lo que tengo una curva de historial de producción para cada pozo,y muestra un cierto comportamiento ruidoso debido a los métodos inherentes de mediciones (y muchas otras razones). Como es una curva histórica, todas las fechas son fechas pasadas (comienzan alrededor de 1950 y se siguen agregando a mi conjunto de datos cada mes), siendo la última fecha disponible igual a octubre-2020. Sobre la base de estos puntos de datos, quiero calcular el valor de ADN para cada pozo, mirando las últimas 24 fechas (2 años atrás).

Básicamente, el método para estimar el ADN es:

  • Transforme qoil en Log(qoil) para tener una gráfica lineal y realizar una regresión lineal de estos valores.

Picture2.JPG

  • Una vez obtenidos los valores de Pendiente e Interceptación de esta regresión lineal, se calcula el Log(qoil) tanto para el registro de fecha de destino (qoil_end), como para la fecha 24 meses antes de Log( qoil_ini ), es decir, para el log de fecha de destino(qoil_end),y para la fecha 24 meses antes de Log(qoil_ini ), es decir.qoil_ini
    • Log(qoil_ini) á [TargetDate menos 24 meses] x Pendiente + Interceptación
    • Log(qoil_end) - [TargetDate] x Pendiente + Interceptación
  • Transforme los valores del registro en qoil:
    • qoil_ini de 10o (Log(qoil_ini))
    • qoil_end de 10o (Log(qoil_end))
  • Calcular DEA (qoil_ini - qoil_end) / qoil_ini
  • Calcular el ADN - LN (1 - DEA) * 12 / 24

He logrado calcular este valor de ADN para cada pozo, pero solo usando la última fecha disponible como TargetDate (así que tengo la tasa de declinación nominal de los últimos 24 meses). Lo he hecho filtrando mis columnas calculadas auxiliares utilizando la función MAX(data[Date]), como en la siguiente imagen:

Picture3.JPG

Tenga en cuenta que para un determinado Well, todas las filas tienen el mismo valor numérico para la columna DNA calculada, es decir, porque, para ese pozo concreto, todas las fórmulas calculadas utilizan el mismo TargetDate como punto de partida (que es Fecha máxima o fecha histórica más reciente)

En el siguiente enlace está el *.pbix que contiene lo que ya he hecho.

Test Decline.pbix

Aquí está mi petición:

  • Quiero estimar el valor de ADN para cada fecha. Es decir, de pie en cualquier fecha, mirar hacia atrás 24 meses, y estimar el ADN del período anterior de 24 meses.
  • En otras palabras, para un pozo dado, todas las filas (todas las fechas en el historial de un pozo) deben tener un valor de ADN diferente, porque cada vez, los cálculos deben utilizar diferentes períodos de 24 meses. Todas las filas de la tabla completa deben tener valores diferentes (porque para cada fila tiene diferentes pozos y/o fechasdiferentes).

El objetivo es ser capaz de saber en cualquier momento de la historia que fue la tasa de declinación de un pozo en particular. Necesito usar DAX (no Power Query) para resolverlo.

Su ayuda será muy apreciada. Gracias de antemano por su amable apoyo, He estado luchando con este problema durante un par de semanas hasta ahora. ¡Saludos!

4 REPLIES 4
MarceloSaez
Helper I
Helper I

@amitchandak, en el siguiente enlace puede encontrar:

  • Tabla de salida deseada:una tabla de muestra de la salida deseada (un valor distinto de ADN para cada fila). Por ejemplo, obtuve los valores para Sep-2020 eliminando los datos Oct-2020 de los datos de origen, por lo que MAX(date[Date]) hace referencia al sep-2020.
  • Archivo de origen: el archivo de datos original de origen (archivo Excel),
  • el pbix (puedes encontrar este archivo en mi publicación original).

No hay datos confidenciales, ya que todos los datos contenidos en estos archivos no son reales.

Muchas gracias por su interés.

saludos

MarceloSaez
Helper I
Helper I

Hola Ibendlin, gracias por su respuesta.

Con el objetivo de simplificar el problema, mostré un ejemplo de un Pozo que tiene una historia de producción exponencial casi perfecta, pero esto está lejos de ser el caso común: la producción de pozos a menudo muestran cambios muy complejos de tendencias en su producción, a veces aumentando y a veces disminuyendo. Las causas de estos cambios son muchas, tales como:

  • Las técnicas utilizadas para mantener o incluso aumentar la presión de la roca del depósito de petróleo (es decir, la inyección de agua) pueden producir incrementos (DNA negativos).
  • Cuando estas técnicas sufren un error, los DNAs pueden cambiar drásticamente para duplicar el valor anterior.

La siguiente imagen es datos reales de un pozo, donde se puede observar la variabilidad del ADN.

Picture4.JPG

Entonces, toda la historia de producción de un pozo no se puede caracterizar por un solo valor de ADN. En su lugar, los DNA se estiman a lo largo de toda la vida de un pozo productor, porque es una medida del pozo está funcionando en comparación con las expectativas, u otros pozos similares.

El problema que estoy intentando resolver está relacionado con cómo usar cada fecha de fila como parámetro, en lugar de usar MAX(data[Date]).

Gracias de nuevo por su ayuda.

Saludos

Marcelo

@MarceloSaez ¿Puede compartir datos de ejemplo y salida de ejemplo en formato de tabla? O una muestra de pbix después de eliminar datos confidenciales.

lbendlin
Super User
Super User

Eso suena demasiado complejo. ¿Por qué no hacer esto completamente en el mundo logarítmico? Todo lo que necesita saber es la pendiente logarítmica y el valor actual. Todo lo demás se puede calcular, ¿no?

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.