Power BI is turning 10! Tune in for a special live episode on July 24 with behind-the-scenes stories, product evolution highlights, and a sneak peek at what’s in store for the future.
Save the dateEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hi everyone !
Based on the data from the "Input" table, I would like to get the data as in the "Output" table.
I tried to use list.generate, however, I can't get over it yet.
code:
List.Generate(
()=>[DateStart],
each _>[DateEnd],
each Date.AddMonths(_,1)
)
erorr:
Expression.Error: We cannot apply field access to the type Date.
Details:
Value=01.01.2022
Key=DateEnd
all code:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"DateStart", type date}, {"DateEnd", type date}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each List.Generate(
()=>[DateStart],
each _>[DateEnd],
each Date.AddMonths(_,1)
)),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom")
in
#"Expanded Custom"
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"DateStart", type date}, {"DateEnd", type date}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", (x)=>List.Generate( ()=>x[DateStart], each _<x[DateEnd], each Date.AddMonths(_,1) )),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom")
in
#"Expanded Custom"
Hi @Jurekbartlomiej - @alena2k has provide a good solution, but I wanted you to highlight the following:
(1) note we have changed the > to < for this step "each _> _[DateEnd]". It is corrected to "_ < _[DateEnd]"
(2) why it is not working for the future reference.
In the following step from your code:
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each List.Generate(
()=>[DateStart],
each _>[DateEnd],
each Date.AddMonths(_,1)
))
Power Query has lost visibility of the [DateStart] and [DateEnd] from the original table #"Change Type" when List Generate invoked new each step. The above can be rewritten like this, but Power Query will be confused:
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", (_) => List.Generate(
(_)=> _[DateStart],
each _> _[DateEnd],
each Date.AddMonths(_,1)
))
The second (_) effective replaces the first (_), so Power Query does not know where to look for [DateStart] and [DateEnd]. So when @alena2k suggest to use the function, the values of the date are pass from table to the function then to List Generate.
It possible to include this as a nested step, but an alias is required for the table to avoid confusion. It look like this:
= Table.AddColumn(#"Changed Type", "Custom",
(a) =>
List.Generate(
() => a[DateStart],
each _ < a[DateEnd],
each Date.AddMonths( _ ,1)
), type list)
Hi @Jurekbartlomiej you can do it if you move list generation into the function and then add column via Invoke Custom Function
getDates
(DateStart as date, DateEnd as date) =>
let
Source = List.Generate(()=> DateStart,each _ < DateEnd,each Date.AddMonths(_,1))
in
Source
main query
let
Source = .....,
#"Invoked Custom Function" = Table.AddColumn(Source, "Custom", each getDates([startDate], [endDate])),
#"Expanded Custom" = Table.ExpandListColumn(#"Invoked Custom Function", "Custom"),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Custom",{{"Custom", type date}})
in
#"Changed Type"
User | Count |
---|---|
11 | |
8 | |
5 | |
5 | |
4 |
User | Count |
---|---|
16 | |
14 | |
8 | |
6 | |
6 |