The ultimate Fabric, Power BI, SQL, and AI community-led learning event. Save €200 with code FABCOMM.
Get registeredEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hola amigos,
Espero que alguien pueda ayudarme con poco problema. 😊
Mi modelo de datos se basa en 5 tablas, 1 tabla de calendario, 3 tablas de hechos y una tabla de dimensiones.
En este modelo de datos puedo mostrar en la tabla de informes el cliente (tabla de contratos de suscripción del cliente), la fecha de inicio y finalización de la suscripción, el precio, el número de contrato de suscripción (tabla de líneas de suscripción).... También puedo mostrar la próxima fecha de facturación (tabla de dimensiones). La fecha de facturación es definida por el sistema ERP y cambia después de la ejecución de la factura. Medida para mostrar la próxima fecha de facturación:
FutureBillingDate:=
VAR Date = Calculate(Max(Dimension table[Dimensionvaluecode]),Dimension table (Dimensioncode]= “Date »)
Return Date
Ejemplo de mi tabla mostrada en PowerBI basada en el modelo de datos:
Cliente | Fecha de inicio | Fecha final | Precio | Número de contrato de suscripción | Próxima fecha de facturación | Frecuencia de pago |
Papá Noel | 01.01.2025 | 31.12.2030 | 100€ | C00001 | 25.06.2026 | Anual |
Rudolph | 01.01.2025 | 31.12.2028 | 10€ | C00002 | 01.07.2025 | mensual |
Mi objetivo es tener una nueva tabla que muestre la próxima fecha de facturación para los próximos diez años.
Cliente | Número de contrato de suscripción | Próxima fecha de facturación | Precio |
Papá Noel | C00001 | 25.06.2026 | 100€ |
Papá Noel | C00001 | 25.06.2027 | 100€ |
Papá Noel | C00001 | 25.06.2028 | 100€ |
Papá Noel | C00001 | 25.06.2029 | 100€ |
Rudolph | C00002 | 01.07.2025 | 20€ |
Rudolph | C00002 | 01.08.2025 | 20€ |
Rudolph | C00002 | 01.09.2025 | 20€ |
La próxima fecha de facturación, que se basa en nuestro sistema ERP, se sobrescribirá después de la ejecución de la factura para, por ejemplo, C00001, Santa Claus. En 2027, el punto de partida de Papá Noel es para la próxima fecha de facturación es el 25.06.2027. A continuación, la tabla debe tener el siguiente aspecto:
Cliente | Número de contrato de suscripción | Próxima fecha de facturación | Precio |
Papá Noel | C00001 | 25.06.2027 | 100€ |
Papá Noel | C00001 | 25.06.2028 | 100€ |
Papá Noel | C00001 | 25.06.2029 | 100€ |
Papá Noel | C00001 | 25.06.2030 | 100€ |
La misma lógica se aplica a Rudolph en función de sus condiciones.
Espero haber sido capaz de explicar mi problema y mi objetivo de forma clara y comprensible y que alguien pueda ayudarme.
Agradezco cualquier ayuda para encontrar una solución
Teniente 🙂
Hola @v-mdharahman ,
desafortunadamente estoy recibiendo la siguiente falla:
El objeto "Precio" de tipo Columna ya existe en la tabla Objeto de facturación siguiente de tipo. (Está traducido del alemán, así que no sé si el fracaso se llama igual en inglés)
¿Tienes una idea de cómo resolver el problema?
Gracias
Teniente
Hola @Tendo,
El error (el objeto "Price" de tipo Column ya existe) que está viendo se produce porque la columna Price ya existe en la tabla base (tabla de líneas de suscripción) y la fórmula DAX intenta agregar otra columna con el mismo nombre mediante ADDCOLUMNS.
Para solucionar esto, solo deberá cambiar el nombre de la nueva columna en la función ADDCOLUMNS a algo como "Precio de facturación" (o cualquier otro nombre único). Aquí está el código actualizado:
SiguienteProgramaciónDeFacturación =
Años máximos de VAR = 10
DEVOLUCIÓN
ADDCOLUMNS (
GENERAR (
FILTRO (
«Tabla de líneas de suscripción»,
NOT ISBLANK ( [FutureBillingDate] )
),
VAR CustomerName = RELATED ( 'Tabla de contratos de suscripción de cliente'[Cliente] )
VAR ContractNumber = 'Tabla de líneas de suscripción'[Número de contrato de suscripción]
VAR PriceValue = 'Tabla de líneas de suscripción'[Precio]
VAR StartDate = [FutureBillingDate]
VAR EndDate = 'Tabla de líneas de suscripción'[Fecha de finalización]
Frecuencia VAR = 'Tabla de líneas de suscripción'[Frecuencia de pago]
VAR MaxDate = MIN ( EndDate, EDATE ( StartDate, 12 * MaxYears ) )
DEVOLUCIÓN
ADDCOLUMNS (
GENERATESERIES ( 0, MaxYears * 12, 1 ),
"Cliente", CustomerName,
"Número de contrato de suscripción", ContractNumber,
"Próxima fecha de facturación",
INTERRUPTOR (
VERDADERO (),
Frecuencia = "Anual", DATEADD ( StartDate, [Value], YEAR ),
Frecuencia = "Mensual", DATEADD ( StartDate, [Value], MONTH ),
EN BLANCO()
),
"Precio de facturación", PriceValue // Se ha cambiado el nombre para evitar colisiones
)
),
"BillingDateFiltered",
IF ( [Próxima fecha de facturación] <= 'Tabla de líneas de suscripción'[Fecha de finalización], [Próxima fecha de facturación], BLANK() )
)
Saludos
Hammad.
Hola @v-mdharahman ,
Pido disculpas por no haber respondido todavía. Estoy muy ocupado en este momento y tuve que posponer este tema. Echaré un vistazo a la solución propuesta lo antes posible y le daré algunos comentarios.
¡Gracias por su ayuda y saludos cordiales
Teniente
Hola @Tendo,
Gracias por volver y confirmar, por favor contáctenos cuando tenga más información sobre este tema.
Saludos
Hammad.
Hola @Tendo,
Espero que todo vaya bien por tu parte. No hemos recibido respuesta suya, así que quería comprobar si el problema se resolvió. En caso afirmativo, marcar la solución útil sería increíble para otros que podrían encontrarse con lo mismo.
¿Sigues atascado? No te preocupes, envíanos un mensaje y podemos volver a hablar del tema.
Saludos
Hammad.
Hola @Tendo,
Nos dimos cuenta de que no ha habido ninguna actividad reciente en este hilo, así que quería comprobar si tuviste la oportunidad de ver la respuesta proporcionada anteriormente o si el problema se resolvió por tu parte.
Si aún necesita ayuda, simplemente responda aquí y lo retomaremos desde donde lo dejamos.
Saludos
Hammad.
Hola @Tendo,
Gracias por ponerse en contacto con el foro de la comunidad de Microsoft Fabric.
Para lograr una tabla dinámica que muestre las próximas fechas de facturación de los próximos 10 años por cliente y suscripción, en función de la próxima fecha de facturación actual de su ERP, deberá generar una tabla calculada en Power BI mediante DAX que lea la "Próxima fecha de facturación" actual (de la tabla de dimensiones) y compruebe la frecuencia de pago (mensual, anualmente, etc.). Debe agregar de forma iterativa fechas de facturación futuras en función de esa frecuencia y se detiene en la fecha de finalización del contrato o en una ventana máxima de 10 años.
DAX:
SiguienteBillingSchedule =
VAR MaxAños = 10
DEVOLUCIÓN
ADDCOLUMNS (
GENERAR (
FILTRO (
'Tabla de líneas de suscripción',
NOT ISBLANK ( [FutureBillingDate] )
),
VAR CustomerName = RELATED ( 'Tabla de contratos de suscripción del cliente' [Cliente] )
VAR ContractNumber = 'Tabla de líneas de suscripción'[Número de contrato de suscripción]
Precio VAR = 'Tabla de líneas de suscripción'[Precio]
Fecha de inicio de VAR = [FutureBillingDate]
VAR EndDate = 'Tabla de líneas de suscripción'[Fecha de finalización]
Frecuencia VAR = 'Tabla de líneas de suscripción'[Frecuencia de pago]
VAR MaxDate = MIN ( EndDate, EDATE ( StartDate, 12 * MaxYears ) )
DEVOLUCIÓN
ADDCOLUMNS (
GENERATESERIES ( 0, MaxYears * 12, 1 ),
"Cliente", CustomerName,
"Número de contrato de suscripción", ContractNumber,
"Próxima fecha de facturación",
INTERRUPTOR (
VERDADERO (),
Frecuencia = "Anual", DATEADD ( StartDate, [Valor], AÑO ), ),
Frecuencia = "Mensual", DATEADD ( StartDate, [Valor], MES ), ),
EN BLANCO()
),
"Precio", Precio
)
),
"BillingDateFiltered",
IF ( [Próxima fecha de facturación] <= 'Tabla de líneas de suscripción' [Fecha de finalización], [Próxima fecha de facturación], BLANK() )
)
Esto creará una tabla con una fila por fecha de facturación futura por contrato. Puede filtrar aún más BillingDateFiltered en el informe para quitar las filas en blanco. Y si sus frecuencias varían (trimestral, semestral, etc.), puede expandir la lógica SWITCH en consecuencia.
Si no entiendo sus necesidades o aún tiene problemas con él, no dude en hacérnoslo saber.
Saludos
Hammad.
Equipo de apoyo a la comunidad
Hola @v-mdharahman ,
finalmente tengo tiempo para comprobar si tu solución funciona.:-)
En primer lugar, muchas gracias por su ayuda!!
Tengo una pregunta. Después de "Switch", ¿la frecuencia es un VAR? No funciona para mí.
Muchas gracias y un saludo cordial
Teniente 🙂
@v-mdharahman , por favor, olvídalo. Encontré mi error. Acabo de darle a su frecuencia VAR un nombre diferente en mi código ... 🙈
Hola @Tendo,
Como no hemos tenido noticias suyas, simplemente seguimos con nuestro mensaje anterior. Me gustaría confirmar si ha resuelto con éxito este problema o si necesita más ayuda.
En caso afirmativo, puede compartir su solución alternativa y marcarla como una solución para que otros usuarios también puedan beneficiarse. Si encuentra una respuesta particularmente útil para usted, también puede marcarla como una solución.
Si es así, sería muy útil para la comunidad si pudieras marcar la respuesta que más te haya ayudado. Si todavía estás buscando orientación, no dudes en darnos una actualización, estamos aquí para ayudarte.
Saludos
Hammad.