March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now
Hi Power BI community !
I need help on a power query script I have created for transforming one of my table in a dataflow.
I have two tables :
I want to recalculate the transaction_item_amount with the discount(s) applied on it. So I replace the content with the discounted content.
For now, here is the power query M script I did (it also does several other transformations but the most interesting part is the second part of the file) :
let
Source = transactions,
NoIntermag = Table.SelectRows(Source, each [transaction_sub_type] <> "intermagasin"),
OnlyVentes = Table.SelectRows(NoIntermag, each [transaction_type] = "vente"),
Ventes = Table.SelectRows(OnlyVentes, each [shop_go_id] <> "632c5c860078140014ced90e"),
#"Remove columns" = Table.RemoveColumns(
Ventes,
Table.ColumnsOfType(
Ventes, {type table, type record, type list, type nullable binary, type binary, type function}
)
),
#"Inserted conditional column" = Table.AddColumn(
#"Remove columns",
"Client encarté",
each if [customer_go_id] = null then false else if [transaction_sub_type] = "bon_de_commande" then false else true
),
ChangeTypeClientEncarte = Table.TransformColumnTypes(
#"Inserted conditional column", {{"Client encarté", type logical}}
),
CalculMontantRemiseIncluse = Table.FromRecords(
Table.TransformRows(
ChangeTypeClientEncarte,
(row) =>
Record.TransformFields(
row,
{
{
"transaction_item_amount",
each
let
transactionItemId = row[transaction_item_id],
listeRemises = Table.SelectRows(
lien_transac_remises, each [transaction_item_id] = transactionItemId
),
remisesAppliquees = Table.Column(listeRemises, "Pourcentage_de_remise"),
//calculMontantRemise = Number.Round(montantInitial * List.Product(remisesAppliquees), 2),
calculMontantRemise = Number.Round(
List.Accumulate(remisesAppliquees, _, (acc, remise) => acc * (1 - remise)), 2
),
montantRemise = if calculMontantRemise is null then 0 else calculMontantRemise
in
montantRemise
}
}
)
),
Value.Type(ChangeTypeClientEncarte)
),
MontantRemiseIncluse = Table.TransformColumnTypes(
CalculMontantRemiseIncluse, {"transaction_item_amount", type number}
)
in
MontantRemiseIncluse
This code seems to work. But it's TERRIBLY low. I launched the dataflow update yesterday evening and it hasn't finished yet 😭
I assume the issue lies in the request I do to the lien_transac_remises table from the transaction table (with selectRows). But I'm not sure and I NEED YOUR HELP !
Do you have to do that in Power Query? Will be much simpler to do that in the data model in Power BI.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
User | Count |
---|---|
36 | |
27 | |
19 | |
11 | |
8 |
User | Count |
---|---|
54 | |
43 | |
24 | |
13 | |
12 |