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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Cálculo de fechas de vencimiento en intervalos futuros

Tengo una tabla con una serie de campos que incluyen la fecha de creación, la fecha de emisión, la fecha de vigencia, la fecha de cierre, etc. Quiero crear columnas calculadas para determinar si la fecha de vigencia es de 30 días, 60 días, 90 días o más de 90 días. Sin embargo, lo que veo al usar Date.InIsNextNDays es que un elemento puede aparecer en 60, 90 o 120 días. Me parece que necesito algo como:

La fecha de entrada en vigor está entre X (60) e Y (90) o 90 y 120. ¿Cuál es el método preferido para realizar esas operaciones?

2024-04-30_14-07-49.png

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

@gemcityzach,

Pruebe esta columna personalizada en Power Query:

each
  if Date.IsInNextNDays([Effective_Date], 30) then
	"dueNext30"
  else if Date.IsInNextNDays([Effective_Date], 60) then
	"dueNext60"
  else if Date.IsInNextNDays([Effective_Date], 90) then
	"dueNext90"
  else if Date.IsInNextNDays([Effective_Date], 120) then
	"dueNext120"
  else 
	"NONE"

DataInsights_0-1714513220453.png

¿Cuál es el beneficio de esto en comparación con tener varias columnas de tipo booleano calculadas para cada período? Supongo que todavía puedo hacer una medida de conteo en esa columna para obtener el recuento de elementos 'due30'.

ctDue30 = CALCULAR (

COUNTROWS ( 'tabla' [Vencimiento los próximos n días] )

, [vencimiento próximos n días ] = "vencimientoNext30"

) --end countrows

) --end calcular

@gemcityzach,

Sí, puede crear una medida de recuento para due30, etc. Si una fila tendrá "Sí" para un máximo de un intervalo futuro, es más sencillo tener una columna con el intervalo futuro que sea "Sí". De lo contrario, debe expandir la tabla horizontalmente (columnas adicionales) para controlar cada intervalo futuro. Con el enfoque de una sola columna, puede agregar esa columna a un objeto visual y se dividirán automáticamente los datos. Podría simplificar la medida ctDue30 a solo COUNTROWS('table') y el objeto visual aplicaría el filtro de intervalo futuro a cada celda de la matriz, por ejemplo.

Del mismo modo, si tuviera una tabla de ventas y quisiera agrupar cada fila en la banda de ventas adecuada (0 - 99, 100 - 199, etc.), sería más eficaz tener una sola columna Banda de ventas. De lo contrario, tendría que agregar una columna para cada intervalo de banda de ventas y no podría seleccionar varias bandas de ventas en una segmentación de datos porque serían columnas independientes.

Me gusta que 🙂 voy a hacer una prueba hoy y ver cómo funciona. ¿Hay alguna manera de agruparlo durante > 120 días para poder agrupar todo lo que no sea 30/60/90/120 en ese cubo?

@gemcityzach,

Pruebe esto. Devuelve "NONE" si Effective_Date es menor que hoy, y "due>120" en la cláusula ELSE.

each
  if [Effective_Date] < DateTime.Date(DateTime.LocalNow()) then
	"NONE"
  else if Date.IsInNextNDays([Effective_Date], 30) then
	"dueNext30"
  else if Date.IsInNextNDays([Effective_Date], 60) then
	"dueNext60"
  else if Date.IsInNextNDays([Effective_Date], 90) then
	"dueNext90"
  else if Date.IsInNextNDays([Effective_Date], 120) then
	"dueNext120"
  else 
	"due>120"

Recibo todo tipo de errores, sobre todo para fechas que están ahora en el pasado o incluso en un futuro cercano (90 días fuera).2024-05-01_11-23-03.png ¿Alguna idea para resolver eso?

= Table.AddColumn(#"Tipo cambiado", "dueNext30", cada uno si Date.IsInNextNDays([Effective_Date], 30) & [Effective_Date] <> "null" entonces
"dueNext30"
de lo contrario, si Date.IsInNextNDays([Effective_Date], 60) & [Effective_Date] <> "null", entonces
"dueNext60"
de lo contrario, si Date.IsInNextNDays([Effective_Date], 90) & [Effective_Date] <> "null", entonces
"dueNext90"
de lo contrario, si Date.IsInNextNDays([Effective_Date], 120) y [Effective_Date] <> "null", entonces
"dueNext120"
más
"NINGUNO")

@gemcityzach,

Intente comprobar primero si hay nulo:

each
  if [Effective_Date] is null then
	null
  else if [Effective_Date] < DateTime.Date(DateTime.LocalNow()) then
	"NONE"
  else if Date.IsInNextNDays([Effective_Date], 30) then
	"dueNext30"
  else if Date.IsInNextNDays([Effective_Date], 60) then
	"dueNext60"
  else if Date.IsInNextNDays([Effective_Date], 90) then
	"dueNext90"
  else if Date.IsInNextNDays([Effective_Date], 120) then
	"dueNext120"
  else 
	"due>120"

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.