Recent Activity
Table of Contents:
Introduction
Requirements
Configurations
Usage and Troubleshooting
Conclusion
Introduction:
Overview of SAS Visual Analytics App (Mobile):
The SAS Visual Analytics App (Mobile) enables users to access and interact with reports on mobile devices.
Available for both iOS and Android platforms.
Supports interactive filtering, drilling down, and report navigation.
Objectives of this article:
To understand installation and configuration.
To learn best practices for mobile visual analytics.
To troubleshoot common issues effectively.
What Is SAS Visual Analytics App?
SAS Visual Analytics App is a companion application to SAS Visual Analytics. It is a free mobile app that enables users to view the reports that are created in SAS Visual Analytics, and to share insights with anyone, anywhere.
Using SAS Visual Analytics App, you can view and share charts and reports on Apple or Android devices. These include iPads, iPhones, and Android tablets and smartphones…
SAS Visual Analytics App provides comparable features to the desktop report viewer, including support for the following tasks:
download charts and reports from your organisation's servers
view charts and reports in standard or expanded mode
view and make comments about charts and reports
Requirements:
System & Network Requirements:
Operating System Requirements:
iOS: Latest iPhone and iPadOS versions are recommended.
Android: Requires recent OS versions for best performance.
SAS Server Compatibility:
SAS Viya or SAS 9.x backend required.
Ensure proper network and firewall settings to allow secure access.
Authentication & Security:
Supports Single Sign-On (SSO) & OAuth-based authentication.
Data security policies need to be properly configured.
Manage Mobile Devices: SAS Help Center
Configurations:
Configuration & Setup at SAS Server-side:
Add Mobile Devices to Allowlist or Denylist: SAS Help Center: Mobile: How To
Configuring User Permissions:
Ensure users have proper role-based access control settings.
Lack of permissions can cause authentication failures.
Configuration & Setup at Client-side:
Downloading and Installing the App:
Available on Apple App Store & Google Play Store.
Ensure the latest version is installed to avoid compatibility issues.
Connecting to SAS Visual Analytics Server:
Users can manually enter the server URL.
Or open a report URL that automatically adds the server.
Usage and Troubleshooting:
SAS Visual Analytics App (Mobile):
Dashboard Navigation & User Interface:
Home screen provides access to recent reports.
Use filters and prompts to interact dynamically.
Drill-down feature allows deeper data insights.
Offline Mode:
Reports can be downloaded for offline access.
Ensure synchronisation settings are enabled before going offline.
Data Export Options:
Export charts and tables as images.
Some features may require additional user permissions.
Common Issues & Troubleshooting:
Connection Issues:
Ensure VPN or firewall settings allow mobile access.
Incorrect server URL setup can cause login failures.
Report URL Issues (iOS-specific):
Sometimes, clicking report links does not launch the app.
Workaround: Open SAS Visual Analytics App first, then paste the URL in a Mobile browser.
Common Troubleshooting: SAS Help Center: Troubleshooting SAS Visual Analytics App
Enable debugging VA App for more troubleshooting:
For Android: SAS Help Center: Collect Log Messages
For iOS: SAS Help Center: Collect Log Messages
Insights from SAS Communities Discussion:
Challenges Shared by Users:
Report responsiveness varies between desktop and mobile.
Issues with resizing visualisations on mobile screens.
Solutions & Best Practices:
Optimise the layout for different screen sizes.
Use relative positioning of report elements.
Use a smaller number of VA Objects for better performance (e.g.: Prompts, Container etc..)
SAS Community Discussion Reference:
SAS Communities Post: Solved: SAS Visual Analytics Report Mobile View - SAS Support Communities
Viewing Reports on Mobile Devices:
Mobile-Specific Features:
Gesture-based navigation for interactive analytics.
Supports real-time updates from connected SAS servers.
How Reports Are Displayed:
Mobile interface automatically adjusts layout.
Users can switch between pages using tabs.
Saving Report State:
App retains filters and drill-downs for the next session.
Guest users cannot save the report state.
Best Practices & Performance Optimisation:
Optimising Report Performance:
Minimise the number of visual elements on each page for a better user experience.
Use aggregated data instead of detailed tables.
Regular Updates & Fixes:
Always keep the app updated for new features.
Check SAS hotfixes for resolving compatibility issues
Best Practices for Designing Reports: SAS Help Center: Additional Recommendations for Designing Reports
Responsive Layout for Precision Containers:
Read more on Precision Container use in responsive Layout: SAS Help Center: 2025.02 (February 2025)
Conclusion:
Using the SAS Visual Analytics App (Mobile):
Summary of Key Takeaways:
SAS Visual Analytics App (Mobile) allows dynamic report access.
Proper configuration ensures seamless connectivity.
Reports are available in Offline Mode.
Troubleshooting common issues improves user experience.
Next Steps for Users:
Try out the Visual Analytics App (Mobile) on your handheld devices.
Explore additional SAS documentation and resources.
... View more

Labels:
0
0
In SAS's official documentation, the Disaster Recovery solution is addressed using the backup-restore method. However, for some of our clients, real-time workloads are very intensive, and the time lost during backup restore does not meet SLA requirements. With the advancement of new technologies, we believe that the Disaster Recovery solution should now be approached through replication, rather than backup-restore. In our opinion, structures like SAS's integrated Postgres should also be automatically replicated within the Disaster Recovery solution.
... View more

- Find more ideas tagged with:
- disaster recovery
- New idea
- Real-time Replication
- SAS Viya
See more ideas labeled with:
1
0
I have a program running in about half an hour, and I'm trying to optimize each part of the code to reduce the execution time. There is a loop which computes, among other things, many times the probit of a matrix (each time the matrix is different). The matrix is big but most of the values are duplicated, so I wonder if there is an hack to speed up the probit by computing it only on the unique values rather than on the many duplicated ones.
This is a small 10x7 example reproducing how the matrix is constructed and it's structure
proc iml;
call randseed(42);
min = 1E-10;
max = 1-min;
num_loans = {4 26 24 1 31 7 54};
num_loans_rep = repeat(num_loans, 10);
pd = { /*probability of default*/
0.026 0.008 0.008 0.038 0.037 0.005 0.003 ,
0.003 0.001 0.012 0.043 0.009 0.011 0.031 ,
0.039 0.010 0.019 0.036 0.002 0.040 0.015 ,
0.002 0.020 0.003 0.019 0.001 0.007 0.031 ,
0.040 0.001 0.049 0.045 0.013 0.044 0.002 ,
0.015 0.021 0.005 0.027 0.046 0.040 0.022 ,
0.031 0.017 0.041 0.016 0.005 0.024 0.026 ,
0.019 0.026 0.042 0.039 0.021 0.006 0.030 ,
0.005 0.011 0.012 0.002 0.017 0.002 0.035 ,
0.050 0.032 0.025 0.042 0.034 0.007 0.016 };
defaulted = randfun({10 7},'binomial', pd, num_loans_rep);
def_rates = defaulted/num_loans; /*bound def_rates values between min and max*/
def_rates = min <> def_rates >< max;
p = probit(def_rates);
print num_loans_rep, defaulted, def_rates, p; call tabulate(value, freq, def_rates); print (value`)[l='value'] (freq`)[l='freq'];
quit;
As you can see about 70% of the matrix in input to the probit function ( def_rates ) is min = 1E-10 , and there are other duplicated values.
In the following code there is a larger example 10000x10000 in which the execution time becomes relevant. For simplicity here the matrix def_rates is not constructed as before, but the idea is the same: lot of values are duplicated, so the probit function "wastes" lot of time to compute the same values. In the code I propose three alternative methods to the benchmark: method 2 initializes the output matrix by copying everywhere the probit of the most frequent value ( p_min ) and then replaces it with the correct values where def_rates is different from min ; method 3 computes the sparse matrix of the input pre-bounding matrix ( def_rates0 which is 70% zero), computes the probit of the sparse matrix, goes back to the full matrix and replaces the zeros with p_min ; method 4 finds the unique values of the input matrix and loops over them to compute its probit and assign it to the corresponing locations in the output matrix.
%macro tic;
%global t_start;
%let t_start = %sysfunc(datetime());
%mend;
%macro toc;
%PUT WARNING- %sysevalf(%sysfunc(datetime()) - &t_start);
%mend;
proc iml;
call randseed(42);
N = 10000;
b = j(N,N,.);
t = 5;
/*70% of values in b are 0*/
call randgen(b,'binomial',0.068,t);
def_rates0 = b/(t+1);
min = 1E-10;
max = 1-min;
def_rates = min <> def_rates0 >< max;
/*method 1 - benchmark (6.5 sec)*/
%tic;
p1 = probit(def_rates);
%toc;
/*method 2 (3.4 sec)*/
%tic;
p_min = probit(min);
p2 = j(N,N,p_min);
idx = loc(def_rates ^= min);
p2[idx] = probit(def_rates[idx]);
%toc;
/*method 3 (5.3 sec)*/
%tic;
s = sparse(def_rates0);
p3 = probit(s[,1]) || s[,2:3];
p3 = full(p3,N,N);
p3[loc(def_rates0 = 0)] = p_min;
%toc;
/*method 4 (8 sec)*/
%tic;
call tabulate(value, freq, def_rates);
p4 = def_rates;
do i=1 to ncol(value);
p4[loc(p4 = value[i])] = probit(min <> value[i]);
end;
%toc;
max_diff2 = max(abs(p2-p1));
max_diff3 = max(abs(p3-p1));
max_diff4 = max(abs(p4-p1));
print (value`)[l='value'] (freq`)[l='freq'];
if N < 20 then print def_rates, s, p1;
print max_diff2 max_diff3 max_diff4;
quit;
Method 2 is the best and takes almost half of the time of the benchmark, however, since there are only 6 unique values in the input matrix, I dream of a way faster method to solve the problem. For example, probit(1E-10) is computed 70317776 times... I wonder if there is a way to let the probit function (and more generally, any function) to have a "memory" of the already computed values, so that it could simply recall them instead of computing them again and again. Actually, I don't know how vectorization operations work under the hood, I guess that multiple values are computed at the same time, hence it may be that the concept of a "memory" doesn't have any sense.
My setup:
SAS EG 8.3 Update 3 (8.3.3.181) (64-bit)
SAS/IML 15.2
... View more

0
2
I am trying to use SAS/IML to perform computations with what in some cases are very small numbers, e.g., less than constant('maceps') and am stymied by my inability to make the expression ndx = loc( vector= max( vector )) return only one value instead of > 1 . When, for example, vector = {8.372E-26 4.63E-103}, the variable ndx will contain {0 0} because the two values in vector are smaller than constant('maceps'), which is 2.2e-16.
I am enclosing the code of an IML module which demonstrates what I want to do, and have included a listing of the inputs and outputs to and from the module for your perusal. For small values of m and p, e.g., .01, computing ( x ## p - y ## p ) ## ( 1/p ) produces values close to 1, and I see that the results include 0 in the output, or some very small number such that computing 1 + number > 1 results in False, e.g., 0, and not True, e.g., 1 .
I will be appreciative for any suggestions because I have tried strategies such as scaling the x and y values by constant('maceps'') or constant('small') but to no avail. Perturbing x[ j ] and y[ i, j ] by adding a uniform random variate in [0,1] # constant('maceps') similarly fails when 1/p is large, e.g., 1/p >> 1. For example,
proc iml ;
a =8.372E-26 ;
b= 4.63E-103 ;
p = .01 ;
c = ( a ## p + b ## p ) ## (1/p) ;
print c ;
quit ;
----------
Output:
---------
c
4.985E-19
TIA,
Ross
options nonotes ;
proc iml ;
reset storage=featclus.featclus ;
load module=_all_ ;
start compute_similarity( x, y, m, p ) ;
/* compute unweighted Lukasiewicz ("normal" (unweighted) Lukasiewicz structure) similarity
*
* purpose: compute similarity between feature vector j, class mean(s) i
*
* parameters:
* x ::= 1 x n_feature vector of features, each column normalized into [0, 1]
*
* y ::= n_class x n_feature matrix of class means, produced from normalized x features
*/
if nrow( x ) ^= 1 then run error( 'compute_similarity', 'Feature vector x must be row vector' ) ;
n_classes = nrow( y ) ; /* # of class means in class mean matrix */
n_feat = ncol( x ) ; /* # of features in x vector */
dist = j( n_classes, n_feat, . ) ;
similarity = j( 1, n_classes, . ) ;
do i = 1 to n_classes ;
do j = 1 to n_feat ;
/* compute similarity btwn x, y for each feature element x[ j ], class mean value y[ i, j ] */
dist[ i, j ] = ( 1 - abs( x[ j ] ## p - y[ i, j ] ## p )) ## ( 1 / p ) ;
end ; /* j */
end ; /* i */
/* compute similarity btwn x, y for each class mean
* dist[ i , : ]` is mean of row vector for class mean i
*/
similarity = dist[ , : ]` ## ( 1 / m ) ;
return similarity ;
finish compute_similarity ;
x = { .1 .2, .3 .4, .5 .6, .7 .8 } ;
if any( x = 0 ) then x[ loc( x=0 ) ] = constant( 'maceps' ) ;
y = { .15 .35, .351 .45 } ;
print x y ;
rslt = compute_similarity( x[1,], y, 1,1 ) ;
print rslt ;
rslt = compute_similarity( x[2,], y, .5, .5 ) ;
print rslt ;
rslt = compute_similarity( x[3,], y, .001, .01 ) ;
print rslt ;
rslt = compute_similarity( x[4,], y, .05, .05 ) ;
print rslt ;
rslt = compute_similarity( x[1,], y, 0.000024943605419, 4.148552428951820) ;
print rslt ;
***store module=compute_similarity ;
quit ; ---------- Output: ----------
x
y
0.1
0.2
0.15
0.35
0.3
0.4
0.351
0.45
0.5
0.6
0.7
0.8
rslt
0.9
0.7495
rslt
0.6600432
0.8439022
rslt
0
6.03E-139
rslt
2.496E-10
3.9649E-6
rslt
8.372E-26
4.63E-103
... View more

0
8
A new update is available for SAS/ACCESS Interface to Google BigQuery , version 9.43 : Hot Fix: M7Z010 - Published 02MAY2025 , Download link for M7Z010 Component name: SAS/ACCESS Interface to Google BigQuery Related SAS release: SAS 9.4 Issues addressed in M7Z010 SAS Note 69503 A query that includes the INTERSECT of two queries that reference a Google BigQuery table might result in a performance issue and error SAS Note 70583 Reading a Google BigQuery table might take longer than normal and result in a crash or an “ERROR: During read: processStream retries exhausted” This list of notes might be incomplete. For a complete list of issues addressed by this hot fix, visit the hot fix page for M7Z010 Note: A comprehensive list of all SAS hot fixes is available from support.sas.com. You can use the SAS Hot Fix Analysis, Download, and Deployment (SASHFADD) tool to manage your SAS hot fixes.
... View more

0
0
Unanswered topics
These topics from the past 30 days have no replies. Can you help?
Subject | Likes | Author | Latest Post |
---|---|---|---|
0 | |||
0 | |||
0 | |||
2 | |||
0 | |||
1 | |||
0 | |||
0 | |||
0 | |||
1 |