Forum Discussion
Change tracking between dates
Look at the below example. I have a basket of fruits and I update the fruits and the price everyday. One day I have 4 fruits and the next day I am missing the orrange. Prices are also different.
Now show me how you will create a visual that shows what changed between these dates? Now imagine how to show the change trackign for the whole year. Can you help?
| Date | Fruit | Price |
| 17-09-2021 | Apple | 10 |
| 17-09-2021 | Orange | 15 |
| 17-09-2021 | Banana | 20 |
| 17-09-2021 | Pear | 25 |
| 18-09-2021 | Apple | 15 |
| 18-09-2021 | Banana | 22 |
| 18-09-2021 | Pear | 25 |
8 Replies
- TomMartensSuper User
Hey Sertan_CPH ,
I consider the Ribbon chart a good fit for this data visualization task:
In regards to visualizing a complete year, I recommend creating a dedicated Calendar table, and create a relationship between the Calendar table (the one-side) and your table (the many-side). Then you can use the Calendar table on the x-axis of the ribbon chart.
This article also contains how to create a Calendar table: Time patterns – DAX Patterns
Hopefully, this helps to provide some ideas on how to tackle your challenge.
Regards,
Tom
- Sertan_CPHFrequent Visitor
TomMartens Hi
It is very practical and I really like this method but as you can imagine my data is very large and not only few fruits but 1000 line items. It is simply too confusing to use ribbon chart in this case
- Greg_DecklerCommunity Champion
Sertan_CPH For part of the answer, you can use MTBF, which will help you show changes between days as long as items exist. See my article on Mean Time Between Failure (MTBF) which uses EARLIER: http://community.powerbi.com/t5/Community-Blog/Mean-Time-Between-Failure-MTBF-and-Power-BI/ba-p/339586.
The basic pattern is:
Column =
VAR __Current = [Value]
VAR __PreviousDate = MAXX(FILTER('Table','Table'[Date] < EARLIER('Table'[Date])),[Date])
VAR __Previous = MAXX(FILTER('Table',[Date]=__PreviousDate),[Value])
RETURN
__Current - __Previous - Greg_DecklerCommunity Champion
Sertan_CPH Here's a way to generate the necessary missing rows and calculate the change in Price:
Table17a = VAR __Table = ADDCOLUMNS( GENERATE( DISTINCT('Table17'[Date]), DISTINCT('Table17'[Fruit]) ), "Price",LOOKUPVALUE(Table17[Price],Table17[Date],[Date],Table17[Fruit],[Fruit])+0 ) VAR __Table1 = ADDCOLUMNS( __Table, "Change", VAR __PreviousDate = MAXX(FILTER(__Table,[Date]<EARLIER([Date]) && [Fruit]<=EARLIER([Fruit])),[Date]) VAR __PreviousPrice = MAXX(FILTER(__Table,[Date]=__PreviousDate && [Fruit]=EARLIER([Fruit])),[Price]) RETURN [Price] - __PreviousPrice ) RETURN __Table1- Sertan_CPHFrequent Visitor
Hi Greg_Deckler I like your approach but I am getting an error "A table of multiple values was supplied where a single value was expected."
What can be going wrong here?
- Greg_DecklerCommunity Champion
Sertan_CPH Hmm, weird, I actually tested that one. See attached PBIX beneath signature. I have to say though, I like TomMartens approach.
- Ashish_MathurSuper User
Hi,
Create a Calendar Table with a relationship from the Date column of your Data Table to the Date column of your Calendar Table. To your visual, drag the Date column from your Calendar Table and Fruit column from your Data Table. Write these measures
Total price = sum(data[price])
Total price on previous day = calculate([total price],previousday(calendar[date]))
Growth (%) = divide(([total price] - [Total price on previous day]),[Total price on previous day])
Hope this helps.