Power Query RESOLU : Si Condition alors Query1 sinon Query2

merinos

XLDnaute Accro
Bonjour le Forum,

J'ai un cube de transactions.
Toutes les transactions & budgets sur plusieurs années et plusieurs SBU (départements)

Mon query permets de sélectionner quel SBU doit être chargé... Je suis bien content.
Une ligne du query sélectionne les fichiers a charger. Et cela réduit mon cube à +/- 500 milles lignes.

Comme le monde apprécie des gens performants, mon rapport sert maintenant dans des réunion entre département...

Il suffirait de pouvoir éteindre le filtre pour que le tour soit joué.
" #"Filtered Rows" = Table.SelectRows(#"Filtered to data", each Text.Contains([Name], fctnParameter("SBU"))), "

Évidement on aurai plus de lignes... 3 ou 4 millions , mais c'est jouable.
Ce serait super de pouvoir avoir quelque chose comme ceci:

VB:
#"Filtered Rows" = if fctnParameter("Data Name") ="All"
then Table.SelectRows(#"Filtered to data", each Text.Contains([Name], fctnParameter("SBU")))
                                  else #"Filtered to Data",

GRRRR cela na marche pas...
Quelqu'un a déjà essayé?
Merci

Mérinos


Voici mon code tel qu'il tourne actuellement. Mais c'est pas joli.

Code:
let
Source = AllFiles,


// case "All"
#"Filtered to dataBB" = Table.SelectRows(Source, each Text.Contains([Name], fctnParameter("Data Name"))),
//#"Filtered Rows" = Table.SelectRows(#"Filtered to dataBB", each Text.Contains([Name], fctnParameter("SBU"))),
#"Invoked Custom FunctionBB" = Table.AddColumn(#"Filtered to dataBB", "fctnOneyearMulti", each F_OneYear([TheFile])),
#"Sorted RowsBB" = Table.Sort(#"Invoked Custom FunctionBB",{{"Name", Order.Ascending}}),
#"Removed Other ColumnsBB" = Table.SelectColumns(#"Sorted RowsBB",{"fctnOneyearMulti"}),
#"Expanded fctnOneyearMultiBB" = Table.ExpandTableColumn(#"Removed Other ColumnsBB", "fctnOneyearMulti", {"Cycle", "Date - Calendar Year/Month", "Planning Level", "Material", "Net Sales", "GM ", "Qtty"}, {"Cycle", "Date - Calendar Year/Month", "Planning Level", "Material", "Net Sales", "GM ", "Qtty"}),
#"Changed TypeBB" = Table.TransformColumnTypes(#"Expanded fctnOneyearMultiBB",{{"Cycle", type text}, {"Planning Level", type text}, {"Material", type text}, {"Date - Calendar Year/Month", type date}, {"Net Sales", type number}, {"Qtty", type number}, {"GM ", type number}}),
#"Case_All" = #"Changed TypeBB",



// case one SBU selected
#"Filtered to data" = Table.SelectRows(Source, each Text.Contains([Name], fctnParameter("Data Name"))),
#"Filtered Rows" = Table.SelectRows(#"Filtered to data", each Text.Contains([Name], fctnParameter("SBU"))),
#"Invoked Custom Function" = Table.AddColumn(#"Filtered Rows", "fctnOneyearMulti", each F_OneYear([TheFile])),
#"Sorted Rows" = Table.Sort(#"Invoked Custom Function",{{"Name", Order.Ascending}}),
#"Removed Other Columns" = Table.SelectColumns(#"Sorted Rows",{"fctnOneyearMulti"}),
#"Expanded fctnOneyearMulti" = Table.ExpandTableColumn(#"Removed Other Columns", "fctnOneyearMulti", {"Cycle", "Date - Calendar Year/Month", "Planning Level", "Material", "Net Sales", "GM ", "Qtty"}, {"Cycle", "Date - Calendar Year/Month", "Planning Level", "Material", "Net Sales", "GM ", "Qtty"}),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded fctnOneyearMulti",{{"Cycle", type text}, {"Planning Level", type text}, {"Material", type text}, {"Date - Calendar Year/Month", type date}, {"Net Sales", type number}, {"Qtty", type number}, {"GM ", type number}}),
#"Case_Other" = #"Changed Type",


result = if fctnParameter("SBU") = "All"
                    then #"Case_All"
                    else #"Case_Other"

in  #"result"
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Ne serait-ce pas dans le filtre lui même qu'il faudrait faire intervenir votre test ? genre :

let
fnFiltre(NameValue) => if fctnParameter("Data Name") = "All" Text.Contains(NameValue, fctnParameter("Data Name") else Text.Contains(NameValue, fctnParameter("SBU"),

#"Filtered Rows" = Table.SelectRows(#"Filtered to data", each fnFiltre([Name]))
in
#"Filtered Rows"

Cordialement

Edit: je viens de tester un truc semblable qui fonctionne:

VB:
let
    condition = "Commence",
    fnTestNom= (Nom as text, arg  as text) => if condition = "Commence" then Text.StartsWith(Nom, arg) else Text.Contains(Nom,arg),

    Source = Excel.Workbook(File.Contents("........"), null, true),
    Table_Adhérents_DefinedName = Source{[Item="T_Clients",Kind="DefinedName"]}[Data],
    //
    #"Lignes filtrées" = Table.SelectRows(#"Type modifié", each ([#"ID"] <> null) and (fnTestNom([Nom],"C")))
in
    #"Lignes filtrées"
 
Dernière édition:

merinos

XLDnaute Accro
Merci @Roblochon ,

Ok... je vais devoir comprendre cela...C'est pas encore clair pour moi comment implémenter cela


Mais je me découvre de nouvaux problèmes:
dans la version d'Excel 365 que j'ai a la maison (mise a jours automatiques... ) j'ai un problème avec mes query: il refuse de prendre plusieurs sources dans un même Query.

Bref: je vais ouvrir une nouvelle question avant de pouvoir continuer... Grrrr
 

merinos

XLDnaute Accro
Bonjour @Roblochon @chris ,

J'ai trouvé la solution : on crée une "Invoked Function" qui retourne une "string" et non une table...
et on l'intègre dans le query.

Dans ton exemple tu crée "fnTestNom" comme une fonction de fonction dont le resultat est donc une fonction

Ici je crée "Mon_Filtre" qui est une string...
VB:
let
    Mon_Filtre = if Invoked_Question="Titre" then Invoked_Titre
                                             else Invoked_Doc_Type,

    Source = Folder.Files("C:\Users\EU6732\Downloads"),
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Name", "Extension", "Folder Path"}),

    #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each Text.Contains([Name], Mon_Filtre))
 in
    #"Filtered Rows"

Attention: j'emploie "Invoked_Titre" qui est une "Invoked Function" voir fichier lié. ( :cool: : j'ai solutionné mon problème )


Bref: MERCI, tout est solutionné. Reste juste a documenter tout cela afin que le client puisse le comprendre quand il va faire sa mise a jour...

Demande TERMINÉE

Merinos
 

Pièces jointes

  • Question Invoked Function.xlsx
    293.3 KB · Affichages: 4

Statistiques des forums

Discussions
312 198
Messages
2 086 146
Membres
103 130
dernier inscrit
FRCRUNGR