Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola chicos,
Tengo problemas al tratar de crear una medida que compare dos fechas de tablas de hechos que no están (obviamente) conectadas. Explicaré mi esquema.
Primero tengo una tabla de facturas que se ve así:
invoice_id | creation_date | due_date | Importe | Número de pagos previstos | amount_payment1 | amount_payment2 | amount_payment3 |
1 | 01/04/2024 | 01/05/2024 | 20 € | 2 | 10 | 10 | nulo |
2 | 02/04/2024 | 02/05/2024 | 30 € | 1 | 30 | nulo | nulo |
3 | 03/04/2024 | 03/05/2024 | 25 € | 3 | 10 | 10 | 5 |
4 | 04/04/2024 | 04/05/2024 | 35 € | 1 | 35 | nulo | nulo |
Luego tengo una tabla de pagos que se llena automáticamente con la lista de pagos esperados.
payment_id | invoice_id | payment_date | Amount_paid |
1 | 1 | 30/04/2024 | 10 € |
2 | 1 | 10/05/2024 | 10 € |
3 | 2 | 30/04/2024 | 30 € |
4 | 3 | 30/04/2024 | 10 € |
5 | 3 | 10/05/2024 | 10 € |
6 | 3 | nulo | 5 € |
7 | 4 | nulo | 35 € |
Si no tengo que recibir los pagos, la fecha de pago es nula. Luego, esa columna se actualiza cuando recibo el pago de manera efectiva.
Ahora mi objetivo es contar el número de pagos que se reciben antes de la fecha de vencimiento de cada factura. Tenga en cuenta que la fecha de vencimiento es la fecha máxima en la que debemos recibir todos los pagos de una factura.
Ambas tablas no están vinculadas directamente entre sí, sino que están vinculadas a través de una tabla de dimensiones que contiene el invoice_id, el due_date, la cantidad, etc.
Y también ambas fechas (due_date y payment_date) están conectadas a una tabla de calendario (relaciones inactivas)
Una de las soluciones sería poner el due_date en la tabla de pagos de cada línea. Creo que hará que todo sea más fácil.
Pero, ¿es una buena práctica tener una columna de una tabla de dimensiones que esté presente en una tabla de varios hechos?
Gracias de antemano por su ayuda.
Lo intentaré. Gracias
Aquí tienes un código de ejemplo por si lo necesitas...
let
invoiceSource =
Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Vc3dCcAgDEbRVUqeBfM7TXCZztOpOoka1LQPylU4fO5AUEArVUbWkZbJeL33M2Mcwn1BKx5fWjnVSdmK4jHBMhJG0pxkW0Z+SxZMg2myk2LfKdtTrQM=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [invoice_id = _t, creation_date = _t, due_date = _t, Amount = _t, #"Number of payments expected" = _t, amount_payment1 = _t, amount_payment2 = _t, amount_payment3 = _t]),
invoiceTypeChange =
Table.TransformColumnTypes(invoiceSource,{{"invoice_id", Int64.Type}, {"creation_date", type date}, {"due_date", type date}, {"Amount", type text}, {"Number of payments expected", Int64.Type}, {"amount_payment1", Int64.Type}, {"amount_payment2", Int64.Type}, {"amount_payment3", Int64.Type}}),
paymentSource =
Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSAWMTfWMDfSMDIxMQ30DhUdMapVidaCUjqLSpviE2aWMg1whNtzFCGszFbbgpVBqH4WZQaZAKuKA5yDiIoDFUNBYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [payment_id = _t, invoice_id = _t, payment_date = _t, Amount_paid = _t]),
paymentTypeChange =
Table.TransformColumnTypes(paymentSource,{{"payment_id", Int64.Type}, {"invoice_id", Int64.Type}, {"payment_date", type date}, {"Amount_paid", type text}}),
mergeQueries =
Table.NestedJoin(paymentTypeChange, {"invoice_id"}, invoiceTypeChange, {"invoice_id"}, "invoiceTable", JoinKind.LeftOuter),
expandDueDate =
Table.ExpandTableColumn(mergeQueries, "invoiceTable", {"due_date"}, {"due_date"}),
addColumn =
Table.AddColumn(expandDueDate, "Payment Before Due", each try if [payment_date] < [due_date] then 1 else 0 otherwise 0, Int64.Type)
in
addColumn
Mi enfoque para esto sería combinar la fecha de vencimiento en la tabla de pagos de Power Query y, a continuación, crear una columna personalizada que compruebe si la fecha de pago es menor que la fecha de vencimiento. Si los resultados de esa columna fueran 1 para menor que y 0 para no, la medida resultante sería la suma de esa columna. Si usara "sí" para menor que y "no" para no, la medida resultante sería un recuento condicional.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
1 | |
1 |