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
djalmajr
Regular Visitor

detonante

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 DATOSCONTRATOTIPOPlanEstado
01/12/20200001AZ
01/12/20200002BQContratación
01/12/20200003DP
01/12/20200004YH
08/12/20200001AZ
08/12/20200002BQ
08/12/20200003DPCancelación
08/12/20200004YH
15/12/20200001AZ
15/12/20200002BTCambio de PLAN
15/12/20200004YH
22/12/20200001RZCambio de tipo
22/12/20200002BT
22/12/20200004YH

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!

1 ACCEPTED SOLUTION
v-robertq-msft
Community Support
Community Support

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:

  1. Cree estas columnas calculadas:
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)

  1. Cree estas medidas:
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())

  1. Cree un gráfico de tabla y colóquelo así:

v-robertq-msft_0-1609400706841.png

  1. También puede crear una tabla calculada para mostrar los datos con estados especiales, como este:
Table 2 =

FILTER('Table',[STATUS]<>BLANK())

v-robertq-msft_1-1609400706849.png

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.

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

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:

v-robertq-msft_0-1612148651341.png

Luego abrí mi archivo pbix de prueba original, y cambié mi solución de esta manera, puede seguir mis pasos:

  1. Cree estas columnas calculadas:
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)
  1. Cree estas medidas:
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())
  1. Cree un gráfico de tabla y algunas segmentaciones como esta:

v-robertq-msft_1-1612148651352.png

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.

v-robertq-msft
Community Support
Community Support

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:

  1. Cree estas columnas calculadas:
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)

  1. Cree estas medidas:
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())

  1. Cree un gráfico de tabla y colóquelo así:

v-robertq-msft_0-1609400706841.png

  1. También puede crear una tabla calculada para mostrar los datos con estados especiales, como este:
Table 2 =

FILTER('Table',[STATUS]<>BLANK())

v-robertq-msft_1-1609400706849.png

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!

v-robertq-msft
Community Support
Community Support

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())

v-robertq-msft_0-1608879474544.png

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:

  1. Cree dos columnas calculadas en la tabla principal:
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)
  1. Cree una tabla calculada:
Table 3 =

FILTER('Table',[Flag]=0)

Y puedo conseguir una mesa como esta:

v-robertq-msft_1-1608879474583.png

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!!!

amitchandak
Super User
Super User

@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.

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.