Don't miss your chance to take the Fabric Data Engineer (DP-700) exam on us!
Learn moreNext up in the FabCon + SQLCon recap series: The roadmap for Microsoft SQL and Maximizing Developer experiences in Fabric. All sessions are available on-demand after the live show. Register now
Hello everyone,
As you can see, i need a calculated column, that repeats the last date whenever the value between "Total Left" and "Amount Left Day Before" doesnt change, and if i get a difference i get the present day.
So, for "Date" 03/03/18 i got 34 and 0.... so it returns 03/03/2018. The next day i still got 34 and 34, so it keeps the date 03/03/18.
However on date 03/06/18 i got 140 and 34, so the "Last Movement Day" receive 03/06/18.
I did a calculated column, but i cant keep the previous day ( i got a blank value ) when "amounts" column keeps equals. Can someone help me filling blank cells with present date values?
Many thanks !!
| ( i need that columm ) | (best what i got ) | ||||
| Date | Product | Total Left | Amount Left Day Before | Last Movement Day | Last Movement Day |
| 03/03/2018 | Water | 34 | 0 | 03/03/2018 | 03/03/2018 |
| 03/04/2018 | Water | 34 | 34 | 03/03/2018 | (blank) |
| 03/05/2018 | Water | 34 | 34 | 03/03/2018 | (blank) |
| 03/06/2018 | Water | 140 | 34 | 03/06/2018 | 03/06/2018 |
| 03/07/2018 | Water | 160 | 140 | 03/07/2018 | 03/07/2018 |
| 03/08/2018 | Water | 160 | 160 | 03/07/2018 | (blank) |
| 03/09/2018 | Water | 160 | 160 | 03/07/2018 | (blank) |
| 03/10/2018 | Water | 230 | 160 | 03/10/2018 | 03/10/2018 |
Solved! Go to Solution.
here is a dax calculated column
Column =
VAR Dif = Table1[Total Left] - Table1[Amount Left Day Before]
VAR previousrow =
TOPN (
1,
FILTER (
Table1,
Table1[Product] = EARLIER ( Table1[Product] )
&& Table1[Date] < EARLIER ( Table1[Date] )
&& ( Table1[Total Left] - Table1[Amount Left Day Before] )
<> 0
),
[Date], DESC
)
RETURN
IF ( Dif = 0, MINX ( previousrow, [Date] ), Table1[Date] )
What I would suggest in your case is simply apply "Fill down" function.
Before:
Select the last column and click on Fill and down:
What I get:
Let me know if this is the solution you are after. If not, we will work it out in Power Query - no problem 🙂
Thanks
Ok, I think I might have jumped to gun here. I see that you are using a calculated column, so Fill Down function will not work.
My result:
The code I have used:
let
Source = Excel.Workbook(File.Contents("C:\PowerBI_problem.xlsx"), null, true),
RFC_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(RFC_Sheet, [PromoteAllScalars=true]),
#"Added Index" = Table.AddIndexColumn(#"Promoted Headers", "Index", 0, 1),
New_app = List.Accumulate(#"Added Index"[Index],{0}, (state,current) => if current = 0 then {#"Added Index"{0}[Date]} else if #"Added Index"{current-1}[Total Left] = #"Added Index"{current}[Total Left] then state & {List.Last(state)} else state & {#"Added Index"{current}[Date]}),
Add_columns= Table.FromColumns(Table.ToColumns(#"Added Index")&{New_app}),
Column_rename = Table.FromColumns({Table.ColumnNames(Add_columns)}&{Table.ColumnNames(#"Added Index")&{"Last Movement Day"}},{"Old","New"}),
//Convert each row to a list
Column_rename_torows = Table.ToRows(Column_rename),
//Rename it using the list
Renamed_cols = Table.RenameColumns(Add_columns, Column_rename_torows )
in
Renamed_cols
I have pasted your table into Excel and then imported into Power BI into Power Query:
Then I add Index column:
#"Added Index" = Table.AddIndexColumn(#"Removed Bottom Rows", "Index", 0, 1)
Then I add this crazy line, which solves your problem:
New_app = List.Accumulate(#"Added Index"[Index],{0}, (state,current) => if current = 0 then {#"Added Index"{0}[Date]} else if #"Added Index"{current-1}[Total Left] = #"Added Index"{current}[Total Left] then state & {List.Last(state)} else state & {#"Added Index"{current}[Date]}),
I have explained it here. The effect is the list of values you are after:
The rest of the steps involves pasting it all together and renaming the columns:
Add_columns= Table.FromColumns(Table.ToColumns(#"Added Index")&{New_app}),
Column_rename = Table.FromColumns({Table.ColumnNames(Add_columns)}&{Table.ColumnNames(#"Added Index")&{"Last Movement Day"}},{"Old","New"}),
//Convert each row to a list
Column_rename_torows = Table.ToRows(Column_rename),
//Rename it using the list
Renamed_cols = Table.RenameColumns(Add_columns, Column_rename_torows )Let me know if it helped.
Thanks
here is a dax calculated column
Column =
VAR Dif = Table1[Total Left] - Table1[Amount Left Day Before]
VAR previousrow =
TOPN (
1,
FILTER (
Table1,
Table1[Product] = EARLIER ( Table1[Product] )
&& Table1[Date] < EARLIER ( Table1[Date] )
&& ( Table1[Total Left] - Table1[Amount Left Day Before] )
<> 0
),
[Date], DESC
)
RETURN
IF ( Dif = 0, MINX ( previousrow, [Date] ), Table1[Date] )
Thanks a lot !! This worked !!
Thanks for helping, but a dax solution is a better way for me!!
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.
| User | Count |
|---|---|
| 49 | |
| 44 | |
| 42 | |
| 19 | |
| 18 |
| User | Count |
|---|---|
| 72 | |
| 67 | |
| 33 | |
| 32 | |
| 31 |