Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.
Buen día a todos.
Tengo el siguiente código que agrega 20 días hábiles al código de stock "Primera fecha de entrada" y esto funciona muy bien. Necesito ayuda para agregar la siguiente condición al código.
Una vez que el código de stock se mueve a 'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK03", hay una escasez de componentes para completar el proyecto. Solo una vez que se reciba el último componente, el código de stock se moverá a 'vw_Rep_Inv_Movements' [NewWarehouse] = "JEMK04".
Lo que quiero lograr es que si los códigos de stock no se mueven a JEMK03, la fecha de finalización debe calcularse a partir de la "Primera fecha de entrada como se muestra a continuación", pero si el código de stock se mueve a JEMK03, la fecha de finalización debe calcularse a partir de la fecha en que el código de stock se movió de JEMK03 a JEMK04.
Código DAX actualizado:
Completion Date =
VAR StartDate = 'vw_Rep_Inv_Movements'[First Entry Date]
VAR DaysToAdd = 20
-- Check if the stock code moved into JEMK03
VAR JEMK03Date =
MINX(
FILTER(
'vw_Rep_Inv_Movements',
'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK03"
),
'vw_Rep_Inv_Movements'[Movement Date] -- Replace with the column that tracks movement dates
)
-- Check if the stock code moved into JEMK04 after JEMK03
VAR JEMK04Date =
MINX(
FILTER(
'vw_Rep_Inv_Movements',
'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK04" &&
'vw_Rep_Inv_Movements'[Movement Date] > JEMK03Date
),
'vw_Rep_Inv_Movements'[Movement Date]
)
-- Determine the adjusted start date
VAR AdjustedStartDate =
IF(
NOT ISBLANK(JEMK03Date) && NOT ISBLANK(JEMK04Date),
JEMK04Date,
StartDate
)
-- Create a table of working days
VAR DateTable =
FILTER (
ADDCOLUMNS (
CALENDAR (AdjustedStartDate, AdjustedStartDate + DaysToAdd + 30), -- Create a date range
"Weekday", WEEKDAY([Date], 2) -- 2 means Monday=1, Sunday=7
),
[Weekday] <= 5 -- Exclude weekends
)
-- Rank the working days
VAR WorkingDaysTable =
ADDCOLUMNS (
DateTable,
"WorkingDayRank", RANKX ( DateTable, [Date], , ASC, DENSE )
)
-- Return the calculated completion date
RETURN
MINX (
FILTER (
WorkingDaysTable,
[WorkingDayRank] = DaysToAdd
),
[Date]
)
¡Avísame si necesitas más aclaraciones!
💌 Si esto ayudó, ¡una marca de Kudos 👍 o Solution sería genial! 🎉
Bien
Kedar
Conéctate en LinkedIn
Hola @Matt_JEM Sin datos representativos, es difícil determinar una solución específica. Pero creo que hay que capturar la fecha en la que las existencias se movió de JEMK03 a JEMK04 y redefina EffectiveDate para verificar si la fecha está en blanco de las existencias movidas de JEMK03 a JEMK04, luego use First Entry Date, de lo contrario, el día en que se mueve. Por ejemplo, puedes probar esto para ajustar tu código:
--Replace 'vw_Rep_Inv_Movements'[Date] with column name which capture moving date from JEMK03 to JEMK04.
VAR JEMK04Date =
CALCULATE(
MIN('vw_Rep_Inv_Movements'[Date]),
'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK04"
)
VAR EffectiveStartDate =
IF(
ISBLANK(JEMK04Date),
StartDate,
JEMK04Date
)
¡Espero que esto ayude!
Si esto resolvió su problema, ¡acéptelo como una solución y felicitaciones!
Saludos
Shahariar Hafiz
Hola @Matt_JEM ,
A continuación, se muestra cómo puede modificar la medida del DAX para incluir la lógica para determinar la fecha de finalización en función de si el código de acciones se mueve a JEMK03 y, posteriormente, a JEMK04:
Completion Date =
VAR StartDate = 'vw_Rep_Inv_Movements'[First Entry Date]
VAR DaysToAdd = 20
-- Find the date when the stock code moved to JEMK03
VAR JEMK03Date =
CALCULATE (
MIN('vw_Rep_Inv_Movements'[Movement Date]),
'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK03"
)
-- Find the date when the stock code moved to JEMK04 after JEMK03
VAR JEMK04Date =
CALCULATE (
MIN('vw_Rep_Inv_Movements'[Movement Date]),
'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK04",
'vw_Rep_Inv_Movements'[Movement Date] > JEMK03Date
)
-- Determine the calculation start date based on the conditions
VAR CalculationStartDate =
IF (
NOT ISBLANK(JEMK03Date) && NOT ISBLANK(JEMK04Date),
JEMK04Date, -- Use the date stock moved to JEMK04 if it passed through JEMK03
StartDate -- Otherwise, use the First Entry Date
)
-- Create a table of dates considering only working days
VAR DateTable =
FILTER (
ADDCOLUMNS (
CALENDAR (CalculationStartDate, CalculationStartDate + DaysToAdd + 30), -- Create a date range
"Weekday", WEEKDAY([Date], 2) -- 2 means Monday=1, Sunday=7
),
[Weekday] <= 5 -- Exclude weekends
)
-- Rank the working days
VAR WorkingDaysTable =
ADDCOLUMNS (
DateTable,
"WorkingDayRank", RANKX ( DateTable, [Date], , ASC, DENSE )
)
-- Return the calculated completion date
RETURN
MINX (
FILTER (
WorkingDaysTable,
[WorkingDayRank] = DaysToAdd
),
[Date]
)
Caso de uso:
Esta fórmula garantiza que la fecha de finalización refleje la lógica condicional especificada.
Saludos
@DataNinja777
He implementado el código a continuación y sigo recibiendo el siguiente error. ¿Tiene alguna sugerencia sobre cómo resolver esto? Le agradezco de antemano su tiempo.
"Se detectó una dependencia circular: vw_Rep_Inv_Movements[JEMK04Date], vw_Rep_Inv_Movements[Column], vw_Rep_Inv_Movements[JEMK04Date]".
Determino JEMK04Fecha =
Entonces obtengo el siguiente resultado. El JEMK04DATE es la fecha correcta en la que el código de stock se ha movido de JEMK03 a JEMK04. Mi fecha prevista de finalización es el 11 NOv 2024
Fecha de primera entrada | JEMK04Fecha | Código de acciones |
2024-10-09 00:00:00 | F00020-INC001-A01-L00-T00 | |
2024-10-09 00:00:00 | 2024-10-14 00:00:00 | F00020-INC001-A01-L00-T00 |
2024-10-09 00:00:00 | F00020-INC001-A01-L00-T07 | |
2024-10-09 00:00:00 | 2024-10-14 00:00:00 | F00020-INC001-A01-L00-T07 |
Hola @Matt_JEM ,
El error de dependencia circular se produce porque DAX está intentando evaluar una columna (JEMK04Date) mientras depende de los cálculos de la misma tabla (vw_Rep_Inv_Movements). Esto sucede debido a una cadena de dependencias que DAX no puede resolver.
A continuación, le indicamos cómo puede resolver este problema:
En lugar de calcular JEMK04Date en la misma tabla, cree una tabla calculada que calcule previamente JEMK03Date y JEMK04Date para cada código de acciones. Esto rompe el bucle de dependencia.
MovementDatesTable =
ADDCOLUMNS (
SUMMARIZE (
'vw_Rep_Inv_Movements',
'vw_Rep_Inv_Movements'[StockCode],
'vw_Rep_Inv_Movements'[First Entry Date]
),
"JEMK03Date",
CALCULATE (
MIN('vw_Rep_Inv_Movements'[EntryDate]),
'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK03"
),
"JEMK04Date",
CALCULATE (
MIN('vw_Rep_Inv_Movements'[EntryDate]),
'vw_Rep_Inv_Movements'[NewWarehouse] = "JEMK04",
'vw_Rep_Inv_Movements'[Warehouse] = "JEMK03"
)
)
Esto crea una tabla independiente (MovementDatesTable) con valores precalculados para cada código de stock.
Modifique la medida para que haga referencia a la tabla calculada en lugar de basarse en las columnas calculadas de la misma tabla.
Completion Date =
VAR StartDate =
CALCULATE (
MIN('MovementDatesTable'[First Entry Date]),
'MovementDatesTable'[StockCode] = SELECTEDVALUE('vw_Rep_Inv_Movements'[StockCode])
)
VAR JEMK04Date =
CALCULATE (
MIN('MovementDatesTable'[JEMK04Date]),
'MovementDatesTable'[StockCode] = SELECTEDVALUE('vw_Rep_Inv_Movements'[StockCode])
)
VAR CalculationStartDate =
IF (
NOT ISBLANK(JEMK04Date),
JEMK04Date + 1,
StartDate + 1
)
VAR DateTable =
FILTER (
ADDCOLUMNS (
CALENDAR (CalculationStartDate, CalculationStartDate + 50),
"Weekday", WEEKDAY([Date], 2)
),
[Weekday] <= 5
)
VAR WorkingDaysTable =
ADDCOLUMNS (
DateTable,
"WorkingDayRank", RANKX (DateTable, [Date], , ASC, DENSE)
)
RETURN
MINX (
FILTER (
WorkingDaysTable,
[WorkingDayRank] = 20
),
[Date]
)
Al mover los cálculos intermedios (JEMK03Date y JEMK04Date) a una tabla calculada independiente, se eliminan las dependencias dentro de la misma tabla.
A continuación, DAX puede hacer referencia a valores precalculados sin provocar una dependencia circular.
Saludos
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.