Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
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.
@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?
COMPAÑÍA
@v-yueyunzh-msft No se devolvió ningún error con el código M. Muchas gracias por su gran ayuda en esto.
@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í?
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"
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.
@v-yueyunzh-msft Tengo dificultades para combinar el código M con mi fuente de datos si pudiera aconsejarme lo que necesito modificar.
Hi , @Qotsa
En mi código, el amarillo es el paso que devuelve la tabla así:
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.
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.
En Power Query, puede verlos todos:
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 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.
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.
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.
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.