Last active
April 8, 2025 07:56
-
-
Save deldersveld/62523ca8350ac97797131560cb317677 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sparkline Line = | |
// Static line color - use %23 instead of # for Firefox compatibility | |
VAR LineColor = "%2301B8AA" | |
// "Date" field used in this example along the X axis | |
VAR XMinDate = MIN('Table'[Date]) | |
VAR XMaxDate = MAX('Table'[Date]) | |
// Obtain overall min and overall max measure values when evaluated for each date | |
VAR YMinValue = MINX(VALUES('Table'[Date]),CALCULATE([Measure Value])) | |
VAR YMaxValue = MAXX(VALUES('Table'[Date]),CALCULATE([Measure Value])) | |
// Build table of X & Y coordinates and fit to 100 x 100 viewbox | |
VAR SparklineTable = ADDCOLUMNS( | |
SUMMARIZE('Table','Table'[Date]), | |
"X",INT(100 * DIVIDE('Table'[Date] - XMinDate, XMaxDate - XMinDate)), | |
"Y",INT(100 * DIVIDE([Measure Value] - YMinValue,YMaxValue - YMinValue))) | |
// Concatenate X & Y coordinates to build the sparkline | |
VAR Lines = CONCATENATEX(SparklineTable,[X] & "," & 100-[Y]," ", [Date]) | |
// Add to SVG, and verify Data Category is set to Image URL for this measure | |
VAR SVGImageURL = IF(HASONEVALUE('Table'[Category]), | |
"data:image/svg+xml;utf8," & | |
"<svg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' viewBox='0 0 100 100'>" & | |
"<polyline fill='none' stroke='" & LineColor & | |
"' stroke-width='3' points='" & Lines & | |
"'/></svg>", | |
BLANK()) | |
RETURN SVGImageURL |
Thanks a lot! I was wondering if there is an easy way to summarize the measure value in a monthly view since daily gives many spikes. I tried this by changing the date to a month integer number YYYYMM. Unfortunatly this gives a sort of sawtooth graph because with a year transition it will go from 202012 to 202101.
@powerlars, late but I see you asked the same thing I figured out today. I simply added a column with a day ordinal in my date dimension:
DataDay = 'Date'[Date]-MIN('Date'[Date])
After that, each granular level can be chosen (in the example below it's by quarter) and properly spaced:
VAR GraphData=
SUMMARIZE(
FILTER(VALUES('Date'[Calendar Year Quarter Number]),[Sales Amount]>0)
, 'Date'[Calendar Year Quarter Number]
, "DayNumber", MIN('Date'[DataDay])
,"Sales Amount", [Sales Amount]
)
VAR XMin=MINX(GraphData, [DayNumber])
VAR XMax=MAXX(GraphData, [DayNumber])
VAR YMin=MINX(GraphData, [Sales Amount])
VAR YMax=MAXX(GraphData, [Sales Amount])
VAR LineData=ADDCOLUMNS(
GraphData,
"X",INT(100*DIVIDE([DayNumber]-XMin,XMax-XMin)),
"Y",INT(100*DIVIDE([Sales Amount]-YMin,YMax-YMin))
)
VAR Lines = CONCATENATEX(LineData,[X] & "," & 100-[Y]," ", [Calendar Year Quarter Number])
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
the field to check with the HASNONEVALUE is the category of what's being measured. For example, I used a sparkline with the awesome code above to trend stocks. In my DAX , my category was the Stock Ticker.