Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more
Hello all,
In dax I created a parent column for all my tasks. But I need to call it in a function. So I have to reproduce it in M from the query editor. I don't know the M code well.
Can you help me please?
My column :
Solved! Go to Solution.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("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", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Index = _t, #"Level task" = _t, task = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Index", Int64.Type}, {"Level task", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "parent task", each Table.Max(Table.SelectRows(#"Changed Type",(k)=> [Level task]=k[Level task]+1 and [Index]>k[Index]),"Index")[task]),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Added Custom", {{"parent task", ""}})
in
#"Replaced Errors"
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("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", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Index = _t, #"Level task" = _t, task = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Index", Int64.Type}, {"Level task", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "parent task", each Table.Max(Table.SelectRows(#"Changed Type",(k)=> [Level task]=k[Level task]+1 and [Index]>k[Index]),"Index")[task]),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Added Custom", {{"parent task", ""}})
in
#"Replaced Errors"
perfect ! thank you so much !
This is the 14th. It is always the closest line above when following the order of the index.
For index 15, is the parent index 14 or index 12 ?
You can see the expected result with my column created in dax. Now I need to create it from the query editor to call it in a function. Something I can't do with a column calculated in dax
Are these tasks all for the same project?
There are several projects and there can be several task hierarchies in one project. That's why the project column is not present. It is not mandatory here. The only thing I need is to know the parent task for each task.
| Index | Level task | task |
| 10 | 1 | Clichy Levallois : Asnières SPOT Gare _ Remontée BREHAT loc49 |
| 11 | 2 | Phase REA |
| 12 | 3 | Programme |
| 13 | 4 | Consignes de suivi + FCD |
| 14 | 3 | Plans techniques |
| 15 | 4 | Etude PT MeS |
| 16 | 3 | MES consigne verte SUIVI |
| 20 | 1 | E22580 - MG2 PE 52 Réfection étanchéité - REA |
| 21 | 2 | MDP - Assemblage liste prévisionnelle de matériels |
| 22 | 2 | MDP - Revue d'exigences |
| 23 | 2 | MDP - Date d'envoi du devis ECO |
| 25 | 1 | E22610 - MG3 PE 380 Remise en état suite à visites légales d'armoires 3200v. |
| 26 | 2 | EE - DCE |
| 28 | 1 | E22929 - Remplacement mécanismes AG 12bd - Achères Poste 2 |
| 29 | 2 | Phase REA (à planifier) |
| 30 | 3 | Programme |
| 31 | 4 | Consignes Roses S6 |
| 32 | 3 | Documents d'exécutions |
| 35 | 1 | L1000-Pk49+515-Réfection étanchéité RD48 |
| 36 | 2 | OA - DCE |
| 39 | 1 | E23978 - MG3 PS 564 Remplacement systématique de mécanismes de manoeuvre sect caténaire (PSL): 10 sectionneurs. |
| 40 | 2 | TE - DCE |
| 42 | 1 | E23987 - Achères P2 Absence de crocodile au panneau C47 |
| 43 | 2 | Phase REA (à planifier) |
| 44 | 3 | Documents d'exécution |
| 45 | 4 | Etudes DEX |
| 47 | 1 | E23999 - MG3 PS 586 RP Renforcée, remplacement constituants et armement type 85 |
| 48 | 2 | TE - DCE |
| 49 | 1 | E23999 - MG3 PS 586 RP Renforcée, remplacement constituants et armement type 85 |
| 50 | 2 | TE - DCE |
| 53 | 1 | E24014 - CBT S11 pour SEL 186 Batignolles |
| 54 | 2 | Phase REA |
| 55 | 3 | Consignes |
| 56 | 4 | PR - Consigne Bleue S11 Temporaire |
| 57 | 3 | MES consigne bleue S11 Temporaire |
| 59 | 1 | E25121 - OGE - Traitement des absences de découplage de la sous-station Berthier suite à rapport d'audit sur PSL - Programme 2019 |
| 60 | 2 | EE - DCE |
| 64 | 1 | E25376 - FEM 07686 - MG3 PSE 411 Remplacement des batteries et chargeurs du poste mixte GREE de Valmy poste1 et des relais de protection des postes de Berlioz (x1), poste 43 (x3) et poste F (x3).1 batterie et 7 relais Sepam. |
| 65 | 2 | EE - DCE |
| 83 | 1 | E26744 - Pra chemin des piécottes (L1000 - Pk 91+927) - DCE |
| 84 | 1 | E26744 - Pra chemin des piécottes (L1000 - Pk 91+927) - REA |
| 85 | 2 | MDP - Assemblage liste prévisionnelle de matériels |
| 86 | 2 | MDP - Revue d'exigences |
| 87 | 2 | MDP - Date d'envoi du devis ECO |
| 92 | 1 | F28652 - Renouvellement de la Sous station des Saugées |
| 93 | 2 | TE - DCE |
| 95 | 1 | Phase REA |
| 96 | 2 | Programme |
| 97 | 3 | Consignes S6 |
| 98 | 3 | Consignes S11 |
| 99 | 2 | MeS |
| 103 | 1 | PRo du Périchois à Grandpuits - renouvellement de la culée C0. - PRO |
| 104 | 2 | MDP - Assemblage liste prévisionnelle de matériels |
| 105 | 2 | MDP - Revue d'exigences |
| 106 | 2 | MDP - Date d'envoi du devis ECO |
| 107 | 1 | PRo du Périchois à Grandpuits - renouvellement de la culée C0. - DCE |
| 108 | 2 | OA - DCE |
| 109 | 2 | EG - DCE |
| 110 | 1 | PRo du Périchois à Grandpuits - renouvellement de la culée C0. - REA |
| 111 | 2 | MDP - Assemblage liste prévisionnelle de matériels |
| 112 | 2 | MDP - Revue d'exigences |
| 113 | 2 | MDP - Date d'envoi du devis ECO |
| 116 | 1 | F32505 - Ligne VMC Km 33 à Km 53 - Renforcement des massifs des supports caténaires inclinés |
| 117 | 2 | TE - DCE |
| 124 | 1 | F36068 - Modification support 14-09 et mise en place sectionnements courts |
| 125 | 2 | TE - DCE |
| 127 | 1 | F36310 - Nogent Gretz Remplacement de feux à lampes par modules à diodes - REA |
| 128 | 2 | Documents d'exécutions |
| 129 | 3 | DEX E/T |
| 130 | 3 | DEX - E/T 1V |
| 132 | 1 | F36462 - Régénération des CdV et PLx entre Paris Saint-Lazare et Bécon les Bruyères et du poste 5 PRS de Batignolles |
| 133 | 2 | EE - DCE |
| 136 | 1 | Travaux IFTE résultant des Etudes de Criticité sur la région de PE.- REA |
| 138 | 1 | Phase REA |
| 139 | 2 | Phasage - Travaux - Essais |
| 140 | 3 | Phase 111 - Pose des voies PointX Nord non MES et caténaires non alimentées |
| 141 | 4 | PT MeS |
| 142 | 4 | Consigne S6 MeS |
| 143 | 4 | Consigne S11 MeS |
| 144 | 4 | MES consigne rose S6 |
| 145 | 4 | MES consigne bleue S11 |
| 146 | 3 | Phase 120 |
| 147 | 4 | Phase 120 - Poste 3 |
| 148 | 5 | Travaux Préparatoires Phase 120 P3 |
| 149 | 6 | Deuxième retrait de service S11 |
| 150 | 7 | Consigne S6 - S11 |
| 151 | 7 | Consigne S6 - S11 |
| 152 | 7 | MeS de la consigne S11 |
| 153 | 5 | PT MES P3 P4 |
| 154 | 5 | Consignes MeS S6 pour le P3 / P4 |
| 155 | 5 | Consigne MeS S11 pour le P3/4 |
| 156 | 5 | DEX - Validation des RC |
| 157 | 5 | Travaux poste 3 (raccourcissement VS17, dépose VS111 et mise en impasse VS112) |
| 158 | 6 | MDP - Démarrage travaux de signalisation |
| 159 | 3 | Phase 500b (Mise en Service PAI et Encadrants) |
| 160 | 4 | IHM+ |
| 161 | 5 | Programme des automatismes MISTRAL NG |
| 162 | 6 | Programme IHM+ indice 00.2 (MàJ FSUIVI + Pièce fichier) |
| 163 | 7 | Etude / vérification |
| 164 | 6 | Programme IHM+ indice 00.3 (Balayage étoilage + SUIVI encadrants) |
| 165 | 7 | PR - Programme des Automatismes / IHM+ |
| 166 | 4 | Etudes PAI |
| 167 | 5 | Etudes PR - PT PAI |
| 168 | 6 | Etudes Programme P4 |
| 169 | 7 | Traitement des dérogations |
| 170 | 8 | PR - Programme de Signalisation |
| 171 | 6 | PT PAI |
At the very minimum you need an index column in your source data.
Please provide sample data in usable format (not as a picture) .
Hi @Anonymous,
Without data structure, i'm not clear about your expected output.
Could you provide sample data and expected output after removing sensitive data?
Sample data and expected output would help tremendously.
Best Regards,
Link
Is that the answer you're looking for? If this post helps, then please consider Accept it as the solution. Really appreciate!
Hello 🙂
In the same project, I have several sub-projects composed of several tasks.
What I want is to get the parent of each task. I have in my data a column with the hierarchical level of each task. The parent of a task is always the row with the first lower level closest to the top of the table.
By highlighting in my example the result I want to get in the query editor.
Determining the maximum value in a M column is a costly operation. How many rows do you have?
Please provide sample data in usable format (not as a picture) and show the expected outcome.
Check out the November 2025 Power BI update to learn about new features.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
| User | Count |
|---|---|
| 53 | |
| 42 | |
| 41 | |
| 20 | |
| 19 |