Does anyone know how to change a Dashboard Range Dynamically? I need the numbers to display and they need to change each month. I can type them in manually, but it is very time consuming.
Hey Felixor or others with similar problem.
I got a solutions delivered from SAS (Falko Schulz), that can update the Dashboard Range. It is base SAS codes that can be scheduled to run monthly/daily etc.
The code uses metadata to update the Dashboard Range:
/*--------------------------------------------------------------------------*/
/* Program: update_bid_43_ranges.sas */
/* Purpose: updates existing range definitions based on a dataset */
/* Author: Falko.Schulz@sas.com, SAS Institute Australia, 5 Jul 2010 */
/* Modified: Falko.Schulz@sas.com, SAS Institute Australia, 23 Oct 2010 */
/*--------------------------------------------------------------------------*/
%let davRangeFile=Country Sale Range 2.rdx;
%let davPath=http://localhost:8080/SASContentServer/repository/default/sasfolders/Projects/Dashboards/Sales by Country/;
%let davUser=sasadm@saspw;
%let davPass=Orion123;
%let locale=DK;
/* metadata server logon details */
options metaserver="localhost"
metaport=8561
metauser="&davUser."
metapass="&davPass."
metarepository="Foundation";
/* file reference to the range definition in webDAV */
filename davfile webdav "&davPath." dir user="&davUser." pw="&davPass.";
/* sample - range data */
data rangedata;
input id label $ 4-32 ccode $ 33-47 color $ 48-53 lower upper;
datalines;
1 Well Below Target belowTarget d06959 . 100
2 Below Target belowTarget d06959 100 200
3 On Target onTarget f1dc63 200 300
4 Above Target aboveTarget 84af5b 300 400
5 Well Above Target aboveTarget 84af5b 400 .
;
run;
/* re-use first part of the existing file until we find the <Intervals> tag */
data part1;
length doc $32576.;
infile davfile("&davRangeFile.(Range)");
input;
doc=_infile_;
output;
if (compress(_infile_) eq "<Intervals>") then stop;
run;
/* generate the second part based on the range data definition */
data part2(keep=doc);
length doc $32576.;
set rangedata end=last;
if _n_ eq 1 then do;
doc='<Interval classificationCode="' || trim(ccode) || '" lowerBoundInclusive="false" upperBound="'
|| compress(put(upper,8.)) || '" upperBoundInclusive="false" color="' || trim(color) || '">';
end; else do;
doc='<Interval classificationCode="' || trim(ccode) || '" lowerBound="' || compress(put(lower,8.)) || '"
lowerBoundInclusive="true" upperBound="' || compress(put(upper,8.)) || '"
upperBoundInclusive="false" color="' || trim(color) || '">';
end;
output;
doc= '<LocalizedTextBundle><LocalizedTextLists><LocalizedTextList language="en" country="' || "&locale." || '"><LocalizedTexts><LocalizedText id="name">';output;
doc= '<text>' || trim(label) || '</text>';output;
doc= '</LocalizedText></LocalizedTexts></LocalizedTextList></LocalizedTextLists></LocalizedTextBundle></Interval>';output;
if last then do;
doc= '</Intervals>';output;
doc= '</RangeDefinition>';output;
end;
run;
/* combine both parts and write back to webDAV */
data _null_;
set part1 part2;
file davfile("&davRangeFile.(Range)");
put doc;
run;
/* update the metadata object timestamp to initiate refresh of the object in BID */
data _null_;
length uri $256 conuri $256 val $256 name $256 id $256;
nobj=0;
n=1;
uri="";
do while (nobj >= 0);
nobj=metadata_getnobj("omsobj:Transformation?Transformation[@Name='&davRangeFile.' and @PublicType='Range']",n,uri);
if (nobj >= 0) then do;
rc=metadata_getattr(uri, "Name", name);
rc=metadata_getattr(uri, "Id", id);
rc=metadata_setattr(uri, "Name", name);
put "Range definition '" name "' [" id "] updated.";
end;
n = n + 1;
end;
run;
/* DEBUG:: dump xml to the log for validation */
data range;
infile davfile("&davRangeFile.(Range)");
input;
put _infile_;
run;
filename davfile;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.