March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now
Chicos, tengo una mesa donde necesito marcar la fecha de inclusión, eliminación y cambio de tipo y plan de un contrato.
Podemos crear una tabla de resumen con esta información, más o menos como vemos a continuación, solo que los contratos que no tienen ningún cambio entre las fechas no formarían parte de la base de datos.
Ejemplo:
BASE DE DATOS | CONTRATO | TIPO | Plan | Estado |
01/12/2020 | 0001 | A | Z | |
01/12/2020 | 0002 | B | Q | Contratación |
01/12/2020 | 0003 | D | P | |
01/12/2020 | 0004 | Y | H | |
08/12/2020 | 0001 | A | Z | |
08/12/2020 | 0002 | B | Q | |
08/12/2020 | 0003 | D | P | Cancelación |
08/12/2020 | 0004 | Y | H | |
15/12/2020 | 0001 | A | Z | |
15/12/2020 | 0002 | B | T | Cambio de PLAN |
15/12/2020 | 0004 | Y | H | |
22/12/2020 | 0001 | R | Z | Cambio de tipo |
22/12/2020 | 0002 | B | T | |
22/12/2020 | 0004 | Y | H |
Nota:
Esta rutina se rotaría semanalmente, por lo que:
Contrato 0001: cambia TIPO el 22/12
Contrato 0002: aparece el 01/12, porque la semana anterior no estaba sobre la base y cambia el plan el 15/12
Contrato 0003: cuando se ejecuta la rutina el 08/12 ya no estaba en la base, por lo que tenemos que marcar cuál fue el último período en que fue encontrado.
Contrato 0004: sin cambios entre períodos.
¡Agradezco tu ayuda!
Solved! Go to Solution.
Hola, @djalmajr
De acuerdo con su descripción, ahora puedo entender compeletely su requisito, desea obtener el estado especial de alguna fila de datos y mostrar el detalle del estado,he hecho todo lo posible para tratar de lograr sus necesidades, puede echar un vistazo a mis pasos y comprobar si es útil:
rank = RANKX('Table','Table'[DATA BASE],,ASC,Dense)
Type flag =
var _lastTIPO=
CALCULATE(MAX('Table'[TIPO]),FILTER('Table',[CONTRATO]=EARLIER([CONTRATO])&&[rank]=EARLIER([rank])-1 ))
return
IF(
[rank]<>1,
IF([TIPO]=_lastTIPO,1,0),1)
Plan flag =
var _lastPLANO=
CALCULATE(MAX('Table'[PLANO]),FILTER('Table',[CONTRATO]=EARLIER([CONTRATO])&&[rank]=EARLIER([rank])-1 ))
return
IF(
[rank]<>1,
IF([PLANO]=_lastPLANO,1,0),1)
Count group by CONTRATO =
RANKX(FILTER(ALLSELECTED('Table'),[CONTRATO]=MAX([CONTRATO])),CALCULATE(MAX('Table'[DATA BASE])),,ASC,Dense )
STATUS =
var _currentmax=
MAXX(FILTER(ALL('Table'),[CONTRATO]=MAX('Table'[CONTRATO])),[Count group by CONTRATO])
var _allmax=
MAXX(ALL('Table'),[rank])
return
SWITCH(
TRUE(),
[Count group by CONTRATO]=1&&MAX('Table'[rank])<>1,"New contract appears" ,
MAX('Table'[Type flag])=0&&[Count group by CONTRATO]<>1,"Type has changed",
MAX('Table'[Plan flag])=0&&[Count group by CONTRATO]<>1,"Plan has changed",
[Count group by CONTRATO]=_currentmax&&[Count group by CONTRATO]<_allmax&&[Count group by CONTRATO]<>1,"Has been cancelled",
BLANK())
Table 2 =
FILTER('Table',[STATUS]<>BLANK())
Y puedes conseguir lo que quieras.
Es difícil obtener el estado usando columnas calculadas para que esto sea lo mejor que puedo hacer.
Puede descargar mi archivo pbix de prueba aquí
Saludos
Equipo de apoyo a la comunidad _Robert Qin
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola, @djalmajr
He comprobado dos veces mi solución y encontrar algún error en ella, traté de abrir el enlace que me dio pero no tengo acceso a él, se puede echar un vistazo:
Luego abrí mi archivo pbix de prueba original, y cambié mi solución de esta manera, puede seguir mis pasos:
rank =
RANKX('Table','Table'[DATA BASE],,ASC,Dense)
Plan flag =
var _lastPLAN=
CALCULATE(
MAX('Table'[PLAN]),
FILTER('Table',
[CONTRACT]=EARLIER([CONTRACT])&&
[rank]=EARLIER([rank])-1 ))
return
IF(
[rank]<>1,
IF([PLAN]=_lastPLAN,0,1)
,0)
Type flag =
var _lastTYPE=
CALCULATE(
MAX('Table'[TYPE]),
FILTER('Table',
[CONTRACT]=EARLIER([CONTRACT])&&
[rank]=EARLIER([rank])-1 ))
return
IF(
[rank]<>1,
IF([TYPE]=_lastTYPE,0,1)
,0)
Cancel flag =
var _maxrank=
MAXX(ALLSELECTED('Table'),[rank])
var _contractsnextday=
SELECTCOLUMNS(
FILTER('Table',
[rank]=EARLIER([rank])+1),
"Contract",[CONTRACT])
return
IF(
[rank]<_maxrank,
IF(
[CONTRACT] in _contractsnextday,
0,1)
,0)
Rank group by CONTRACT =
RANKX(
FILTER(ALL('Table'),
[CONTRACT]=MAX([CONTRACT])),
CALCULATE(MAX('Table'[DATA BASE])),,ASC,Dense )
Status Change =
SWITCH(
TRUE(),
[Rank group by CONTRACT]=1,"New contract appears" ,
MAX('Table'[Type flag])=1&&MAX('Table'[Plan flag])=1,"Plan and type has changed",
MAX('Table'[Type flag])=1,"Type has changed",
MAX('Table'[Plan flag])=1,"Plan has changed",
MAX('Table'[Cancel flag])=1,"Has been cancelled",
BLANK())
Y puedes conseguir lo que quieras.
Puede descargar mi archivo pbix de prueba aquí
Saludos
Equipo de apoyo a la comunidad _Robert Qin
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola, @djalmajr
De acuerdo con su descripción, ahora puedo entender compeletely su requisito, desea obtener el estado especial de alguna fila de datos y mostrar el detalle del estado,he hecho todo lo posible para tratar de lograr sus necesidades, puede echar un vistazo a mis pasos y comprobar si es útil:
rank = RANKX('Table','Table'[DATA BASE],,ASC,Dense)
Type flag =
var _lastTIPO=
CALCULATE(MAX('Table'[TIPO]),FILTER('Table',[CONTRATO]=EARLIER([CONTRATO])&&[rank]=EARLIER([rank])-1 ))
return
IF(
[rank]<>1,
IF([TIPO]=_lastTIPO,1,0),1)
Plan flag =
var _lastPLANO=
CALCULATE(MAX('Table'[PLANO]),FILTER('Table',[CONTRATO]=EARLIER([CONTRATO])&&[rank]=EARLIER([rank])-1 ))
return
IF(
[rank]<>1,
IF([PLANO]=_lastPLANO,1,0),1)
Count group by CONTRATO =
RANKX(FILTER(ALLSELECTED('Table'),[CONTRATO]=MAX([CONTRATO])),CALCULATE(MAX('Table'[DATA BASE])),,ASC,Dense )
STATUS =
var _currentmax=
MAXX(FILTER(ALL('Table'),[CONTRATO]=MAX('Table'[CONTRATO])),[Count group by CONTRATO])
var _allmax=
MAXX(ALL('Table'),[rank])
return
SWITCH(
TRUE(),
[Count group by CONTRATO]=1&&MAX('Table'[rank])<>1,"New contract appears" ,
MAX('Table'[Type flag])=0&&[Count group by CONTRATO]<>1,"Type has changed",
MAX('Table'[Plan flag])=0&&[Count group by CONTRATO]<>1,"Plan has changed",
[Count group by CONTRATO]=_currentmax&&[Count group by CONTRATO]<_allmax&&[Count group by CONTRATO]<>1,"Has been cancelled",
BLANK())
Table 2 =
FILTER('Table',[STATUS]<>BLANK())
Y puedes conseguir lo que quieras.
Es difícil obtener el estado usando columnas calculadas para que esto sea lo mejor que puedo hacer.
Puede descargar mi archivo pbix de prueba aquí
Saludos
Equipo de apoyo a la comunidad _Robert Qin
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola, @v-robertq-msft , primero muchas gracias por ayudarme!
¡Entendiste perfectamente mi necesidad!
Sin embargo, tuve que hacer algunos ajustes a las fórmulas.
Las fórmulas no presentaban errores sin embargo no obtuve el mismo resultado que usted, obviamente hice algo mal.
Enviaré el archivo .pbix.
A continuación se muestra un título de la configuración en los nombres de las columnas:
Tabla á fPool
Tipo = Tipo
Plan: Plan (nombre exacto del portal)
Contrato = Numero
Recuento del grupo por CONTRATO - Masa
Estado - Situación
Tipo de la bandera - Indicador de bandera
Plan de la Bandera - Bandera Plano
¡Gracias de nuevo!
Hola, @djalmajr
Según su descripción, tengo dos entendimientos, puede comprobar cuál es su verdadero significado:
Primero: Sólo necesita obtener una tabla que contenga la información de actualización de estado, puede lograrlo a través de la tabla calculada:
Table 2 =
FILTER('Table',[STATUS]<>BLANK())
Segundo: desea utilizar la instrucción DAX para determinar automáticamente la actualización de estado y filtrar una tabla. De esta manera, sólo puedo usar DAX para determinar las actualizaciones de [TYPE] y .PLAN, porque otro cambio de estado no es muy lógico, puede echar un vistazo a mi método y encontrar si es útil:
rank = RANKX('Table','Table'[DATA BASE],,ASC,Dense)
Flag =
var _lastTIPO=
CALCULATE(MAX('Table'[TIPO]),FILTER('Table',[CONTRATO]=EARLIER([CONTRATO])&&[rank]=EARLIER([rank])-1 ))
var _lastPLANO=
CALCULATE(MAX('Table'[PLANO]),FILTER('Table',[CONTRATO]=EARLIER([CONTRATO])&&[rank]=EARLIER([rank])-1 ))
return
IF(
[rank]<>1,
IF([TIPO]=_lastTIPO&&[PLANO]=_lastPLANO,1,0),1)
Table 3 =
FILTER('Table',[Flag]=0)
Y puedo conseguir una mesa como esta:
Puede descargar mi archivo pbix de prueba aquí
Saludos
Equipo de apoyo a la comunidad _Robert Qin
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola, @v-robertq-msft , gracias por ayudarme!
Resulta que te confundo, en mi base no tengo la columna "Estado", necesito crear esta información.
Déjame ver si puedo mejorar la descripción de mi problema:
1) Necesito saber cuándo un contrato ha cambiado la información del Tipo y/o el plan y marcar la fecha en la que esto ocurrió.
2) Cuando se cancela y cuando surge un nuevo contrato y se marca la fecha en la que se produjo.
Gracias de nuevo!!!
@djalmajr ,La información que ha proporcionado no está des aclarando el problema para mí. Por favor, puede explicar con un ejemplo.
Apreciamos tus Felicitaciones.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.
Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.