Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Bucle Date.AddDays

Hola

Tengo 4 columnas, 'día', 'fecha de inicio', 'fecha de finalización', 'semana'.

Col 'día' es un número entero que define el número del día.

Col 'semana' define la frecuencia con la que se repite el registro.

A continuación, el primer registro ID 11232 indica que el registro ocurre cada lunes, martes, miércoles (día = 123) con una fecha de inicio 22/07/2019 y una fecha de finalización 09/10/2022 y se repite cada 2 semanas (col 'semana' = 2). El valor en semana puede ser 0, lo que significa que el registro no se repite, 1 significa que se repite cada semana, etc.

Mi salida deseada se mostraría debajo de las fechas hasta que cumpla con la fecha de finalización.

Estoy pensando que un bucle Date.AddDays en el editor de consultas sería el camino a seguir, pero estoy luchando por escribirlo.

output.png

date.adddays loop.png

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

@v-yueyunzh-msft Necesito expandir la columna 'Lista final'. Para hacer esto, he intentado agregar la siguiente línea en el editor avanzado sin suerte.

#"Added Custom4" = Table.TransformColumns(#"Added Custom3", {{"End List", each if _ = false then {false} else _}})

¿Podrías echar un vistazo al .pbix por favor?

Archivo .pbix de OneDrive

COMPAÑÍA

Syndicate_Admin
Administrator
Administrator

@v-yueyunzh-msft No se devolvió ningún error con el código M. Muchas gracias por su gran ayuda en esto.

Syndicate_Admin
Administrator
Administrator

@v-yueyunzh-msft Simplemente no lo estoy entendiendo y estoy más confundido que nunca. ¿Tal vez podría proporcionar una muestra de pbix?

Hi, @Qotsa

Gracias por su rápida respuesta, los últimos dos días fueron fin de semana por lo que no puedo responderle de inmediato.

Para su pregunta, ¿puede conectar su fuente de datos desde Mysql y hacer que la tabla de retorno sea así?

vyueyunzhmsft_0-1670807664901.png

Luego puede darme todas las capturas de pantalla de su interfaz del Editor de Power Query (quiero ver la columna si es la misma que yo), incluidos sus campos y los pasos que generó.

Y debe copiarme todo el código M en el "Editor avanzado" de esta consulta en el Editor de Power Query.

Si puedes, también puedes subir el. pbix a OneDrive y comparte tu enlace conmigo.

Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.

Saludos

Aniya Zhang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

@v-yueyunzh-msft TY por su asistencia hasta la fecha.

My Advanced Editor tiene el siguiente código.

dejar
Source = MySQL.Database("34.252.51.71", "powerbi114", [ReturnSingleDatabase=true]),
powerbi114_cmCarerAvailability = Source{[Schema="powerbi114",Item="cmCarerAvailability"]}[Data],
#"Valor reemplazado" = Table.ReplaceValue(powerbi114_cmCarerAvailability,",","",Replacer.ReplaceText,{"day"}),
#"Changed Type" = Table.TransformColumnTypes(#"Replacement Value",{{"day", Int64.Type}}),
#"Columnas eliminadas" = Table.RemoveColumns(#"Tipo cambiado",{"created", "createdBy", "deleted", "deletedBy", "updated", "updatedBy", "companyId", "locationId", "adjustedStartDate", "startTime", "endTime"}),
#"Added Custom" = Table.AddColumn(
test, "start_Monday", (x)=>Date.AddDays(Date.StartOfWeek(x[startDate]),1)


),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Accumul_list", (x)=>
if x[week]=0 then null else if x[week]=1 then {0..( Duration.Days(Date.AddDays(Date.EndOfWeek(x[endDate]),1)-x[start_Monday])+1)/7-1}else if x[week]=2 then
List.Generate(()=>0,each _<=(Number.RoundUp((Duration.Days(Date.AddDays(Date.EndOfWeek(x[endDate]),1)-x[start_Monday])+1)/7/2)-1)*2,each _+2) else 1),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Need List", (x)=>
if x[Accumul_list]<> null then List.Sort(List.TransformMany(x[day_list],each x[Accumul_list],(x,y)=>y*7+x)) else x[endDate]
),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "End List", (x)=>
probar
List.Select(List.Accumulate(x[Need List],{},(a,b)=> a& {Date.AddDays(Date.From(x[start_Monday]) ,b)} ),(z)=>z<=x[endDate])


de lo contrario x[Lista de necesidades]

)
en
#"Añadido personalizado3"

Qotsa_0-1670927711451.png

PBIX -> https://1drv.ms/u/s!AiX0_cACeSxJgSqVYOQ7GmGUY8FG?e=dH6kJG

Hi , @Qotsa

¡Gracias por su rápida respuesta!

No puedo conectarme a su fuente de datos, por lo que debe probar en su lado.

De acuerdo con su código M proporcionado, puede intentar usar este código M para poner en el "Editor avanzado":

let
Source = MySQL.Database("34.252.51.71", "powerbi114", [ReturnSingleDatabase=true]),
powerbi114_cmCarerAvailability = Source{[Schema="powerbi114",Item="cmCarerAvailability"]}[Data],
#"Replaced Value" = Table.ReplaceValue(powerbi114_cmCarerAvailability,",","",Replacer.ReplaceText,{"day"}),
#"Changed Type" = Table.TransformColumnTypes(#"Replaced Value",{{"day", Int64.Type}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"created", "createdBy", "deleted", "deletedBy", "updated", "updatedBy", "companyId", "locationId", "adjustedStartDate", "startTime", "endTime"}),
#"Added Custom" = Table.AddColumn(#"Removed Columns", "start_Monday", (x)=>Date.AddDays(Date.StartOfWeek(x[startDate]),1)),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Accumul_list", (x)=>
if x[week]=0 then null else if x[week]=1 then {0..(Duration.Days(Date.AddDays(Date.EndOfWeek(x[endDate]),1)-x[start_Monday])+1)/7-1}else if x[week]=2 then
List.Generate(()=>0,each _<=(Number.RoundUp((Duration.Days(Date.AddDays(Date.EndOfWeek(x[endDate]),1)-x[start_Monday])+1)/7/2)-1)*2,each _+2) else 1),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Need List", (x)=>
if x[Accumul_list]<> null then List.Sort(List.TransformMany(x[day_list],each x[Accumul_list],(x,y)=>y*7+x)) else x[endDate]
),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "End List", (x)=>
try
List.Select(List.Accumulate(x[Need List],{},(a,b)=> a& {Date.AddDays(Date.From(x[start_Monday]) ,b)} ),(z)=>z<=x[endDate])
otherwise x[Need List]
)
in
#"Added Custom3"

Si esto también devuelve el código de error, puede compartirme el código de error para actualizar este código M.

Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.

Saludos

Aniya Zhang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

@v-yueyunzh-msft Tengo dificultades para combinar el código M con mi fuente de datos si pudiera aconsejarme lo que necesito modificar.

Qotsa_1-1670576668693.png

Hi , @Qotsa

vyueyunzhmsft_0-1670577682718.png

En mi código, el amarillo es el paso que devuelve la tabla así:

vyueyunzhmsft_1-1670577716458.png

Debe reemplazar el código fuente de su origen de datos y hacer que vuelva como la misma tabla anterior.

Luego puede agregar los pasos azules debajo de él.

Si su columna es diferente a la mía, puede modificarla ligeramente de acuerdo con las indicaciones.

vyueyunzhmsft_2-1670577832158.png

No necesita definir una función, solo necesita agregar "," y agregar los pasos que proporciono debajo de él. Y en el último "en" el último paso.

Además, el siguiente texto es el nombre del paso en el Editor de Power Query, ¡puede verlos en los pasos! Y cada paso se ejecuta bajo el paso anterior.

vyueyunzhmsft_3-1670577919352.png

En Power Query, puede verlos todos:

vyueyunzhmsft_4-1670578024550.png

Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.

Saludos

Aniya Zhang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

@v-yueyunzh-msft Thk usted. No puedo revisar su solución actualmente ya que estoy viajando. Podré hacerlo más tarde en mi día.

Thks otra vez.

Syndicate_Admin
Administrator
Administrator

Hi , @Qotsa

De acuerdo con su descripción, desea generar la lista de fechas de acuerdo con la columna "semana, fecha de inicio, fecha de finalización, día". ¿Derecha?

Estos son mis datos de prueba en mi lado.

vyueyunzhmsft_0-1670484317884.png

Puede colocar este código M en el "Editor avanzado" del Editor de Power Query:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lY9RDoNACETvst8mwMDichbj/a8hLrUxtv3oDzOQPBi2rYlA0ZamLBGp2Z7VjFOQQ1oJmB6gIJnzti+F6h217usnHBcsTOI32uYuZXg/9UWHv+FBYhc86rIU28UrNDBS++PqIH16/h7597cTLf933mK98u4H", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [id = _t, carerId = _t, day = _t, length = _t, startDate = _t, endDate = _t, week = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"id", Int64.Type}, {"carerId", Int64.Type}, {"day", Int64.Type}, {"length", Int64.Type}, {"startDate", type date}, {"endDate", type date}, {"week", Int64.Type}}),
    test = Table.AddColumn(#"Changed Type", "day_list", (x)=> List.Transform(Text.ToList(Text.From(x[day])),(y)=>Number.From(y)-1)    ),
    #"Added Custom" = Table.AddColumn(
test, "start_Monday", (x)=>Date.AddDays(Date.StartOfWeek(x[startDate]),1)                   


),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Accumul_list", (x)=>
if x[week]=0 then null  else if x[week]=1 then {0..(Duration.Days(Date.AddDays(Date.EndOfWeek(x[endDate]),1)-x[start_Monday])+1)/7-1}else if x[week]=2 then 
List.Generate(()=>0,each _<=(Number.RoundUp((Duration.Days(Date.AddDays(Date.EndOfWeek(x[endDate]),1)-x[start_Monday])+1)/7/2)-1)*2,each _+2)   else 1),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Need List", (x)=> 
 if x[Accumul_list]<> null then  List.Sort(List.TransformMany(x[day_list],each x[Accumul_list],(x,y)=>y*7+x)) else x[endDate]
 ),
    #"Added Custom3" = Table.AddColumn(#"Added Custom2", "End List", (x)=>
try  
List.Select(List.Accumulate(x[Need List],{},(a,b)=> a& {Date.AddDays(Date.From(x[start_Monday]) ,b)} ),(z)=>z<=x[endDate])


otherwise x[Need List]

)
in
    #"Added Custom3"

Luego podemos obtener la lista de fechas en la columna agregada, otra columna que no necesita, puede eliminarlas.

vyueyunzhmsft_1-1670484396392.png

Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.

Saludos

Aniya Zhang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

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.