Si compartimos, crecemos todos 😎
Este es un canal de formación técnica en análisis de datos e inteligencia artificial, pensado para ayudarte a desarrollar las habilidades, herramientas y el criterio que hoy necesita un profesional de datos.
Acá hablamos de Power BI, IA, automatización y buenas prácticas, siempre con foco en lo importante: convertir datos en decisiones reales 📊🚀
Porque los datos solos no dicen nada… hasta que alguien sabe interpretarlos.
Encontrás tips, trucos y técnicas aplicadas, explicadas de forma clara y directa, tanto si estás empezando como si querés llevar tu análisis un paso más allá.
Este espacio también es comunidad: aprender juntos, compartir lo que sabemos y crecer en el proceso 💡
Si querés sacarle el máximo provecho a Power BI, al análisis de datos y a la IA aplicada, este es tu lugar 🔥
Sumate y crecemos juntos. 😎
Yanina Ariadna
💸 ¿Cómo repartís los gastos en una juntada con amigos?
Antes usábamos una app.... Después… se volvió paga 😒
Entonces probamos con GPT y Gemini.…alucinan un montón. Una te dice que Fulanito le debe a Mengano, otra te arma 25 transferencias de $37,42 🤯
y vos solo querías cerrar la cuenta y disfrutar el asado.
Entonces pasa lo de siempre:
🍕 viaje con amigos
🍻 alguien paga más
💳 otros pagan menos
📱 nadie quiere hacer cuentas
😬 y aparecen los “después te transfiero”
¿Y si lo automatizamos con Excel + Power Query? 👀
La idea es simple:
1️⃣ Ponés los nombres de los participantes
2️⃣ Ponés cuánto pagó cada uno
3️⃣ Listo.
Power Query hace el resto:
✔️ calcula el gasto total
✔️ saca el promedio por persona
✔️ detecta quién tiene saldo a favor y quién debe
✔️ arma la repartija perfecta
✔️ con la menor cantidad posible de transferencias
✔️ fragmentando pagos solo cuando hace falta
✔️ y cerrando todo exacto en cero
Resultado:
👉 menos movimientos
👉 menos “micro transferencias”
👉 menos discusiones
👉 más amigos 😅
Lo mejor de todo
📌 Está hecho 100% en Power Query (código M)
📌 Corre en Excel o Power BI
📌 Es reproducible, auditable y automático
📌 No dependés de apps externas
📌 Y lo podés adaptar a cualquier grupo, viaje o evento
Si te interesa el código M completo, lo dejo en los comentarios 👇
y si querés que lo arme paso a paso, también.
Porque sí:
👉 hasta repartir una juntada puede ser un problema de datos 😎
👉 y los datos, bien modelados, siempre ordenan el caos.
#PowerQuery #Excel #Automatización #DatosEnLaVidaReal #BusinessIntelligence #DataLife #ETL #AprenderDatos
let
// Código Yanina Ariadna y Gemini para distribución de gastos juntadas
// 1. Carga y Limpieza
Source = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
FixTypes = Table.TransformColumnTypes(Source, {{"Nombre", type text}, {"Gastado", type number}}),
DataClean = Table.ReplaceValue(FixTypes, null, 0, Replacer.ReplaceValue, {"Gastado"}),
// 2. Cálculos Base (Promedio y Saldo)
TotalGastado = List.Sum(DataClean[Gastado]),
CantPersonas = Table.RowCount(DataClean),
PromedioValor = Number.Round(TotalGastado / CantPersonas, 2),
AddInfo = Table.AddColumn(DataClean, "Gasto promedio", each PromedioValor, type number),
AddSaldo = Table.AddColumn(AddInfo, "Saldo", each Number.Round([Gastado] - PromedioValor, 2), type number),
AddEstado = Table.AddColumn(AddSaldo, "Estado", each
if [Saldo] > 0 then "Recibe plata"
else if [Saldo] < 0 then "Paga"
else "Al día", type text),
// 3. Ordenar por quien gastó más
SortedData = Table.Sort(AddEstado, {{"Gastado", Order.Descending}}),
// 4. Lógica de Compensación (Cálculo interno)
Deudores = Table.Buffer(Table.Sort(Table.SelectRows(SortedData, each [Saldo] < 0), {{"Saldo", Order.Ascending}})),
Acreedores = Table.Buffer(Table.Sort(Table.SelectRows(SortedData, each [Saldo] > 0), {{"Saldo", Order.Descending}})),
FnAddRanges = (tbl as table, isNegative as logical) =>
let
Idx = Table.AddIndexColumn(tbl, "Idx", 1, 1),
Hasta = Table.AddColumn(Idx, "Hasta", each
let v = List.Sum(List.FirstN(Idx[Saldo], [Idx])) in Number.Round(if isNegative then Number.Abs(v) else v, 2)),
Desde = Table.AddColumn(Hasta, "Desde", each Number.Round([Hasta] - Number.Abs([Saldo]), 2))
in Desde,
RangoD = FnAddRanges(Deudores, true),
RangoA = FnAddRanges(Acreedores, false),
// 5. Cruce de deudas
Cross = Table.AddColumn(RangoD, "A", each RangoA),
ExpandA = Table.ExpandTableColumn(Cross, "A", {"Nombre", "Desde", "Hasta"}, {"Acreedor", "A.Desde", "A.Hasta"}),
CalcMonto = Table.AddColumn(ExpandA, "Monto", each
let
MaxD = List.Max({[Desde], [A.Desde]}),
MinH = List.Min({[Hasta], [A.Hasta]}),
Dif = Number.Round(MinH - MaxD, 2)
in if Dif > 0 then Dif else 0),
// 6. Agrupación para formato horizontal
GroupPagos = Table.Group(Table.SelectRows(CalcMonto, each [Monto] > 0), {"Nombre"}, {
{"Pagos", each
let
Tbl = Table.AddIndexColumn(_, "No", 1, 1),
Recs = Table.TransformRows(Tbl, (r) =>
Record.FromList({r[Acreedor], r[Monto]}, {"Pagar a " & Text.From(r[No]), "Monto " & Text.From(r[No])}))
in Record.Combine(Recs)}
}),
// 7. Unión y Expansión
JoinFinal = Table.NestedJoin(SortedData, {"Nombre"}, GroupPagos, {"Nombre"}, "T", JoinKind.LeftOuter),
ExpandFinal = Table.ExpandTableColumn(JoinFinal, "T", {"Pagos"}),
ColsExpandir = List.Distinct(List.Combine(List.Transform(List.RemoveNulls(ExpandFinal[Pagos]), each Record.FieldNames(_)))),
FinalSinTipar = Table.ExpandRecordColumn(ExpandFinal, "Pagos", ColsExpandir),
// 8. ASIGNACIÓN DINÁMICA DE TIPOS
ListTipos = List.Transform(ColsExpandir, each
if Text.StartsWith(_, "Pagar a") then {_, type text}
else if Text.StartsWith(_, "Monto") then {_, type number}
else {_, type any}
),
Resultado = Table.TransformColumnTypes(FinalSinTipar, ListTipos)
in
Resultado
2 weeks ago | [YT] | 13
View 0 replies
Yanina Ariadna
⏱️ ¿Sabías que en Power BI no todo es dimensión calendario?
En esta charla con Clara Vega Caballero hablamos de horas, minutos y segundos, errores típicos y cómo trabajar correctamente el tiempo usando Power Query y DAX.
👉 Mirá la charla completa acá:
youtube.com/live/tv0vWwH4wo8?t=3620s
2 weeks ago | [YT] | 3
View 0 replies