Hello,
Looking to create a pie chart with a dropdown menu that users can see different data in the pie chart based on the dropdown menu selections which include by "current year" and "current month" of the column called "Status". The column is a "Choice" SharePoint column. In addition to the SharePoint column I need to see the total count of each value.
Example below:
Active 10
Waiting Approval 5
Complete 6
Not Accepted 3
Thanks in advance.
Solved! Go to Solution.
Yes, but there is a trick to this. One involves copying and pasting your Items formula for the PieChart - which I definitely hate to do (OHIO - Only Handle Information Once).
So, the method I use is to add a dynamic table variable to the app. What is a dynamic table variable you might ask...well, I'll tell you the steps:
1) Add a new scrollable screen to your app. (we will be deleting this screen shortly)
2) On that screen, select the Canvas that it has (let's say it is Canvas1) and resize it, especially drag the top of the canvas down to a new Y location (this breaks some of the other formulas that get generated on that scrollable screen - we want them to break). You can rename this canvas if you like.
3) In that canvas, there will be a DataCard (let's say it is DataCard1). Let's rename that to dcdPieData
4) Make that datacard small - it will not contain anything in it so the smaller the better. Do the same with the Canvas size...make it small.
5) Select the Canvas and Cut it (ctrl-X) from the screen.
6) Select the new screen you created and Delete it
7) go back to your PieChart screen and paste (ctrl-V) your canvas to that screen. At this point you can also set the Visible property of the Canvas to false
😎 Go into the properties of the dcdPieData datacard and set the Update property to the following:
{PieData:
ForAll(
SortByColumns(
GroupBy(
AddColumns(
Filter(yourSharePointList, (Created>=yourDropdown.Selected.start) && (Created<=yourDropdown.Selected.end)),
"_status", Status.Value
),
"_status", "records"
),
"_status"
),
{Value: Coalesce(_status, "Blank"),
Count:CountRows(Filter(records, Status.Value=_status)),
Legend: Coalesce(_status, "Blank") & " " & CountRows(Filter(records, Status.Value=_status)
}
)
}
9) Now change the Items property of your PieChart to the following: dcdPieData.Update.PieData
10) Change the Items property of the Legend to : dcdPieData.Update.PieData.Legend
Now, this will all change dynamically based on your dropdown selection. Your pie chart will have name only labels and your legend will have name and count.
@RandyHayes That did it! Awesome! Thanks so much for your help Randy.
Quick question: If I have a label that I want to count all new records for the current day, would I use the following? As this for some reason is only showing "0". I doing based on "Created".
CountRows(
Filter('Credit Memo', Created = Today())
)
Thanks again.
Can you provide a little more detail on the data you are working with and what your dropdown would be like? In general, you are just needing a filter for the Items of your pie chart.
@RandyHayes Hi Randy.
Basically, its a SharePoint list with a "Choice" column called "Status" with choice values (Active, Waiting Approval, Complete, Not Accepted).
I need a pie chart representing these values from this column. The dropdown menu will have two selections (Current year, current month) which the pie chart values will be based on the selection in the dropdown menu. Also need a legend that shows the actual total count of each value per "Current year" or "current month. Basically when "current year" is selected in the dropdown menu the pie chart and legend changes to show the proper chart proportions and the legend count changes as well.
The legend can be just a label as well.
I hope that clarifies.
Thanks again.
This is all fine. I am not sure though still what the date relates to - you mention "Current Year" and "Current Month", that is all fine, but what is the relationship to the data? Are you trying to filter based on the created by date, or some other column? And...is it a date column?
@RandyHayes I get your point. I did not factor in the changing of the status. Then I think forgoing the dropdown menu and show the data based on current month. So when the month changes it only shows statistics for that month automatically. So basically as we are in the month of January, it will show only created records for the month of January from the Status column. Then when February comes it shows statistics just for February. I guess this can be based on creation date?
So, then for your dropdown, I would provide the following formula for the Items property:
Table(
{disp:"Current Year", start:Date(Year(Now()), 1, 1), end:Date(Year(Now(), 12, 31)},
{disp:"Current Month", start:Date(Year(Now()), Month(Now()), 1),
end: DateAdd(DateAdd(Date(Year(Now()), Month(Now()), 1), 1, Months), -1, Days)}
)
Set the Value to display in the properties to disp (probably will default to it)
For your Pie Chart, set the Items property to the following:
ForAll(
SortByColumns(
GroupBy(
AddColumns(
Filter(yourSharePointList, (Created>=yourDropdown.Selected.start) && (Created<=yourDropdown.Selected.end)),
"_status", Status.Value
),
"_status", "records"
),
"_status"
),
{Value: Coalesce(_status, "Blank"),
Count:CountRows(Filter(records, Status.Value=_status))
}
)
This will give you a table of records for the pie chart that will have records for each status value. The records will have a Value and a Count column. The Value will be the name of the status and the Count will be the count of the records that match that status.
@RandyHayes I'm not seeing any data show up in either the dropdown nor the pie chart.
@RandyHayes Ok so I noticed a parentheses missing in the formula for the drop down. I now see data but I'm not seeing an actual number count next to the values in the legend like for example: Active 12.
Please scrub through the formulas I provide as I type them by hand without the aid of a design editor.
There was a missing paren in the dropdown item property, should be this:
Table(
{disp:"Current Year", start:Date(Year(Now()), 1, 1), end:Date(Year(Now()), 12, 31)},
{disp:"Current Month", start:Date(Year(Now()), Month(Now()), 1),
end: DateAdd(DateAdd(Date(Year(Now()), Month(Now()), 1), 1, Months), -1, Days)}
)