Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code FABINSIDER for a $400 discount.
Register nowGet inspired! Check out the entries from the Power BI DataViz World Championships preliminary rounds and give kudos to your favorites. View the vizzies.
Hola comunidad de Power BI,
Me gustaría generar series a partir de la tabla a continuación utilizando el número de mes como valor de entrada de end_value en la sintaxis a continuación.
GENERATESERIES ( start_value, end_value [, step_value] )
Arrendamiento # | Fecha de inicio | Fecha final |
Pagos programados USD |
Meses |
1 | 7/20/2024 | 7/19/2029 | 4,000 | 60 |
2 | 1/1/2023 | 12/31/2024 | 2,000 | 23 |
Por favor, ¿podría decirme cómo puedo generar dinámicamente una tabla de múltiples series generadas que hagan referencia a la columna [Meses] en la tabla?
¡Gracias por tu ayuda!
Saludos
Solved! Go to Solution.
Este tema se resolvió simplificando el código del tema anterior de la siguiente manera:
Series =
GENERATE(
VALUES('Tasks'[Task]), -- Iterate over distinct Task Names
VAR MaxFinalLife = MAXX(FILTER('Tasks', 'Tasks'[Task] = EARLIER('Tasks'[Task])), 'Tasks'[Final Life])
RETURN
SELECTCOLUMNS(
GENERATESERIES(1, MaxFinalLife, 1),
"Series", [Value]
)
)
Hola @DataNinja777
Honestamente, esto se hace mejor en M que en DAX. Su ejemplo, solo tiene dos filas, por lo que la latencia es muy, muy insignificante, pero no es un caso diferente cuando tiene miles de filas, sin mencionar los otros cálculos dentro de su modelo. Pero para ver si es posible en DAX, aquí hay un ejemplo de fórmula de tabla de cálculo
Series =
VAR __TBL =
DATATABLE (
"Start Date", DATETIME,
"End Date", DATETIME,
"Index", INTEGER,
{
{ "2024/7/20", "2029/7/19", 1 },
{ "2023/1/1", "2024/12/31", 2 }
}
)
VAR __Series =
GENERATESERIES ( 1, 60, 1 ) --must use the highest month count
VAR __CROSSJOINED =
ADDCOLUMNS (
CROSSJOIN ( __TBL, __Series ),
"Date", EDATE ( [Start Date], [Value] ) - 1
) -- this will generate dates way later than the end date
RETURN
FILTER ( __CROSSJOINED, [Date] <= [End Date] )
--filter the generated dates to include <= end date
Hola @danextian ,
Gracias por su aporte, sin embargo, las dos líneas son solo un ejemplo simplificado, y podría tener miles de líneas para eso, por lo que escribir números codificados no es una opción para mí. Estaba pensando en algo en línea con la solución a continuación de @xifeng_L , pero en un escenario mucho más simple que el caso a continuación, ya que no necesito hacer que otras entradas en la sintaxis de generateseries sean dinámicas.
https://community.fabric.microsoft.com/t5/Desktop/Generateseries-of-multiple-values/m-p/4052132
Saludos
Hola @DataNinja777 ,
Esta fórmula se refiere a una tabla existente.
Series =
VAR __TBL =
SELECTCOLUMNS('Data', "Start Date", 'Data'[Start Date], "End Date", 'Data'[End Date], "Index", 'Data'[Index] )
VAR __MAX = MAX ( Data[Month] )
VAR __Series =
GENERATESERIES ( 1, __MAX, 1 ) --must use the highest month count
VAR __CROSSJOINED =
ADDCOLUMNS (
CROSSJOIN ( __TBL, __Series ),
"Date", EDATE ( [Start Date], [Value] ) - 1
) -- this will generate dates way later than the end date
RETURN
FILTER ( __CROSSJOINED, [Date] <= [End Date] )
El índice no es necesario. Es solo una forma de identificar a qué fila de la tabla de referencia se refiere una fila de la tabla de series. Tenga en cuenta que hacer esto en una tabla grande puede causar un problema de rendimiento.
Este tema se resolvió simplificando el código del tema anterior de la siguiente manera:
Series =
GENERATE(
VALUES('Tasks'[Task]), -- Iterate over distinct Task Names
VAR MaxFinalLife = MAXX(FILTER('Tasks', 'Tasks'[Task] = EARLIER('Tasks'[Task])), 'Tasks'[Final Life])
RETURN
SELECTCOLUMNS(
GENERATESERIES(1, MaxFinalLife, 1),
"Series", [Value]
)
)
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Check out the February 2025 Power BI update to learn about new features.