Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Join us for an expert-led overview of the tools and concepts you'll need to become a Certified Power BI Data Analyst and pass exam PL-300. Register now.

Reply
Anonymous
Not applicable

Loop through the table in M query

Hello Everyone,

 

I have a below table name as TitleDim, 

 table-sample.png

 its dynamic sometimes has 2 rows and sometimes has 3 rows and more. Loop through the table 'Title.Name' and set as column header and value as Value.Attributes.L01 in another table.

 

Below is my try its working but its static,

 = Table.AddColumn(#"Source Table", TitleDim{0}[Title.Name], each TitleDim{0}[Value.Attributes.L01], type text)

 

How can I do it dynamic?

 

Thanks in advance

 

1 ACCEPTED SOLUTION

Hello @Anonymous 

 

you can use List.Accumulate to accomplish your task. 

Here the complete solution

let
	Source = #table
	(
		{"Title.Name","Value.Attributes.L01"},
		{
			{"Name1","Australia"},	{"Name2","Volkwagen"}
		}
	),
	CellValue = #table
	(
		{"Cell.Value"},
		{
			{"1"},	{"5"}, {"6"}
		}
	),
	ListAccumulate = List.Accumulate
	(
		{0..Table.RowCount(Source)-1},
		CellValue,
		(old,current)=>
		Table.AddColumn(old, Source[Title.Name]{current}, each Source[Value.Attributes.L01]{current} )
	)
in
    ListAccumulate

 

Copy paste this code to the advanced editor in a new blank query to see how the solution works. If this solution fits your need, copy and past a part of it and implement it in your query.

If this post helps or solves your problem, please mark it as solution (to help other users find useful content and to acknowledge the work of users that helped you)
Kudoes are nice too

Have fun

Jimmy

View solution in original post

8 REPLIES 8
Jimmy801
Community Champion
Community Champion

Hello @Anonymous 

 

I don't know if I got you right. However I understood that you need to create a new column, adding a table and using the name and value-column as parameter.

Here the complete solution

let
	Source = #table
	(
		{"Title.Name","Value.Attributes.L01"},
		{
			{"Name1","Australia"},	{"Name2","Volkwagen"}
		}
	),
    TitleFromNameAndValue = Table.AddColumn
    (
        Source,
        "TableFromNameAndValue",
        each #table({[Title.Name]}, {{[Value.Attributes.L01]}}),
        type table
    )
in
    TitleFromNameAndValue

 

Copy paste this code to the advanced editor in a new blank query to see how the solution works. If this solution fits your need, copy and past a part of it and implement it in your query

If this post helps or solves your problem, please mark it as solution (to help other users find useful content and to acknowledge the work of users that helped you)
Kudoes are nice too

Have fun

Jimmy

Anonymous
Not applicable

Hello @Jimmy801 ,

 

Thanks for your reply, unfortunately this is not my expected output. Below is my expectation. 

 

expectedOutput.png

 

Target table has one column 'Value'. I would like to loop through the below table, and add the Column name as }zPBI_country and value as Australia and so on in Target table.

 

table-sample.png

 

Regards

 

Hello @Anonymous 

 

this means that if you have 10 rows in your target table and 2 in your table to be looped through, the expected result is a table with 20 rows where the values are duplicated. 

 

Jimmy

Anonymous
Not applicable

Hi,

 

Initially I have the Target table as below,

TargetTable.png

 

My second table is where looping need to be done

table-sample.png

Outcome as 

exp.output.png

 

Hi @Anonymous 

 

Please see the attached file with a solution.

 

Best Regards,
Mariusz

If this post helps, then please consider Accepting it as the solution.

Please feel free to connect with me.
LinkedIn

 

Hello @Anonymous 

 

you can use List.Accumulate to accomplish your task. 

Here the complete solution

let
	Source = #table
	(
		{"Title.Name","Value.Attributes.L01"},
		{
			{"Name1","Australia"},	{"Name2","Volkwagen"}
		}
	),
	CellValue = #table
	(
		{"Cell.Value"},
		{
			{"1"},	{"5"}, {"6"}
		}
	),
	ListAccumulate = List.Accumulate
	(
		{0..Table.RowCount(Source)-1},
		CellValue,
		(old,current)=>
		Table.AddColumn(old, Source[Title.Name]{current}, each Source[Value.Attributes.L01]{current} )
	)
in
    ListAccumulate

 

Copy paste this code to the advanced editor in a new blank query to see how the solution works. If this solution fits your need, copy and past a part of it and implement it in your query.

If this post helps or solves your problem, please mark it as solution (to help other users find useful content and to acknowledge the work of users that helped you)
Kudoes are nice too

Have fun

Jimmy

Anonymous
Not applicable

Hi @Jimmy801 ,

 

Great. Perfect Solution. You help is much appreciated. Thanks

Hello @Anonymous 

 

your feedback is much appreciated.

 

Jimmy

Helpful resources

Announcements
July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.

Join our Fabric User Panel

Join our Fabric User Panel

This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.