The disappearance of (software) ownership

You own nothing.

You "rent" via "subscription". 


Help! I need somebody, Help! Not just anybody...


We wanted an end to the ever-expanding and cost-skyrocketing, TV "cable bundles" of the 1990s and early 2000s and we sought something like offerings à la carte, whereby television could be paid for on the basis of the individual channels we watch. 

We thought maybe a web could exist where we could subscribe to our favorite publications at a small fraction of the cost of receiving that publication physically through the mail.

What a disaster it has all become.

We've entered a situation where the quality in digital does not match the quality of the tangible, and even with subscriptions, advertising abounds and collects our activity data at every swipe, key press, audio and camera input and turns of the accelerometer and gyroscope.

Now we have 15-25 media subscriptions to watch content on, across 5-10 platforms, each with their own user authentication, questionable customer support and myriad other unique headaches. And each takes around 10-20 seconds to load or toggle between menu options (remember when you could simply and easily just... turn. on. the TV. Or change. the. channel- and immediately be shown the content you requested?); is that really even that big of an ask to companies who have steadily reduced our American Democracy to the audience of a violent tragicomedy?


1995, this TV would never make it to the production line- we are trivializing (and thus rushing the QA of) complexity...


We've been conditioned to think waiting 5-15 seconds for our devices to respond to a button press(!) or having to coordinate QR codes, PINS, passwords, passkeys, giving away the keys to your social accounts or otherwise move heaven and earth to login to yet another streaming subscription (they are like shells- a SaaS company bundled into the SaaS platforms like Amazone Prime and Google TV, etc.- who in turn fund the SaaS ad tech companies that pull and push user metrics around, aggregating, transforming and eventually selling them to the highest bidding data broker without the knowledge of any of the human beings representing the rows on those spreadsheets...😡)- is normal consumer behavior and is "cutting edge" modern technology?

It is not and it is not.

What began as a solution has morphed into a situation worse than the original problem.

Similarly, with the rise of AWS, Azure and GCP, companies are finding that these FAANG corporations are not hesitant to use their sales fangs when biting into IT costs. What was supposed to bring down costs (you subscribe and you can "pay à la carte") has caused costs to spiral out of control as services get unnecessarily bundled with more expensive, "dependent" services, new services that need to make a splash (*cough* AI) are spotlighted in tacky, annoying and downright disruptive ways and then most are shuttered, discounted and eventually obsoleted (hi Metaverse and Google Goggles!)- much to the chagrin of all the rubes who bought into the hype train heralding next, next, next BIG THING!!!

It's a very frustrating and confusing time to be in IT, and I think the majority of our industry would agree with that statement. We are in the process of sadly leaving things behind that we should hold onto and holding onto and building the wrong "new" things as we move forward into a more modern mid-21st Century information applications ecosystem.

Office's weird "365"/"no-standard-on-prem-support!" rebrand and now multi-year assault to jam the Copilot AI button into every conceivable window corner of Windows 11 is just a sad reflection of a solution looking everywhere but their actual customer base for a problem their AI tech can solve.

Worse still the Copilot buttons serve largely just to make things more confusing than they were before the LLM tried to summarize the story of thermodynamics in the form of a quaint, "siren-calling" sonnet, which AI is really good at when you don't know what you are trying to ask of it or what sense to make of or what to do with its answers. (and especially when you don't know what "right" or "maintainable" or "extensible" or "interoperable" looks like in practice).

Did I mention you can no longer edit Office documents offline- even if you have an older licensed version of MS Office/Excel? What in the world is that all about Microsoft? Yes, I want to go online and share all of my company's Excel and other Office data with... Microsoft? 😑

All ERP has moved to Salesforce, Oracle and Dynamics SaaS which cannot resist calling you every month asking you to upgrade to yet another "revolutionary AI" feature you don't ask for and never hinted at asking possibly needing.

And don't even get. us. started. with. these. (obligatory?) LLM "personal assistant" names:

"Rovo"

"Clifford"

"Siri"

"Alexa"

"Gemini"

"Claude"

"Roger Rabbit"

"Inspector Gadget!!"

I get they are appealing to people thinking of AI like Star Wars or Interstellar, but it just seems silly when they are all just (relatively limited by their training data) domain-specific ChatBots. Not R2D2. Not TARS. Not even Chewbacca, really.

Outside of first and foremost the original protocols that make all of this internet thing work (upon which everything else is essentially a fancy wrapper), as well as the frameworks, libraries and languages themselves and IaC like k8s, truly extensible/customizable/interoperable on-prem solutions barely exist in any realistically useable form for mid-sized or enterprise endeavors anymore.

It's Amazon's way, Microsoft's way, Google's way or the highway in late March 2026.

Innovation- the beating heart of information technology- has been stifled in the interest of chasing a hypergrowth market that is predicated on taking control away from users, integration/extension developers and the actual purchasers of software and putting that control into hands of the seller- who never intends on ending the sales relationship.

And who like Oracle, has every intention to trap an unwitting organization in software agreements and subscriptions out of which there is no escape (and only mounting Oracle fees and legal threats).


I would like to be generous and say MS combined WordPad with Notepad, but what is Copilot actually "doing", here?


The biggest offenders I see coming from Microsoft are:

SSIS being neglected despite its usage in any moderately sized organization's data integration pipelines and taken out to pasture in favor of a "WYSIWYG" React UI far more limited in functionality and basically a wrapper of DTS.exe named, "Azure Data Factory". And did I mentioned ADF is subscription-based? Of course it is. Yes, companies love those predictable monthly numbers; they make impressive charts when the share-price rumor-fuel and bonus defenses need to be made.

(forget about actually moving Microsoft- a once-staid and innovative American technology corporation that back in the early aughts had its then CEO Steve Balmer explicitly make a (now-meme-able) memorable rallying cry to attract: "Developers! Developers! Developers!"- into the 21st Century as a company that front-line users, developers and managers enthusiastically embrace, look up to, and recommend to their peers 😐)

"Microslop" that company is not.

The death of SSRS and the incessant push of a PBI product that is viciously locked down from extension to work with other companies' data products, and is not anywhere near maturity after an incubation and "growth/development/R&D/forced evaluation" period of over a decade now, is another prime example of what we all see but very few of us are calling out. 😐


SSRS is... not something anyone was asking Microsoft to replace- MS Marketing made that decision- PBI took the money and ran


SQL Server, which just released its latest product, SQL Server 2025, is being downplayed by Microsoft Sales- despite it being Oracle's closest competitor and a tried-and-true-for-30+ years (Mature), comprehensive, extensible, managed enterprise-grade relational database engine- in favor of pushing decades-long SQL Server customers to move all their relational data workloads to much less capable (but "cloud-ready" (ie. Azure-rent-controlled)), "Azure SQL" serverless (read: non-managed, "G'luck, mate!") databases. 😔

Thank God another Larry Ellison has not pulled a "my billions will buyout Sun Microsystems and then (in 2019) I'll privatize the Java language and Enterprise framework completely and sell required, recurring subscriptions! (fortunately, OpenJDK was a viable alternative for many orgs having to scramble from that deep-fried situation)" with .NET (yet)-

...though I shudder at the thought that Ellison or someone like him (Elon Musk or Larry Page) may someday decide to kill off the last great remaining thing Microsoft possesses (.NET 5+), merely out of jealously and lack of belief in their own overpriced products and comically overhyped impractical ideas.

Where is the creativity going to come from when Big Tech is cutting off all of these avenues for developers to actually make technology attainable, useful and open to extension? The new normal seems to be to design products that fiercely guard users from interacting with people or data outside of the application you are using.

This is what excited investors call a "moat". This is what users bemoan as a closed-off, "walled garden".

Every big tech company wants their products to be the only park we ever visit. The only theme park or museum we ever go to. The only public house we ever decide to stop at for a conversation with friends. The only community center- cut off from other community center sites and other dependent community organizations with sites and users actively using apps that, ya know, would be served by a freer, collaborative and more open internet.

The way things stand now, people we know well who are not routinely on a certain site may as well not even exist to us if we rarely if ever venture outside of our favorite walled social media garden.

I think a little more interoperability and cross-pollination and distributed/shared features would make things a whole lot more fun. Maybe not as lucrative but revenue dollar values don't always capture opportunity costs and free, loyal, evangelist customers are far more valuable in the long run than manipulated, angry, trapped ones are...

This holds especially true for a company that wants to not just grow and make a lot of money but also be held in high esteem by their market, their market competition and the communities in which they operate.

And I use them as a glaring example because I use their technology every day professionally, but this is not just happening at Microsoft. I mean everywhere- Amazon, Google, Salesforce, Netflix, Disney/ESPN, Atlassian, GitHub, ServiceNow, Snowflake, "AI company du semaine", Facebook, Instagram, TikTok, Xitter, LinkedIn, "WalMart.com"?

Especially as these companies cycle through employees like they're hourly-rented Tesla robots whose only concern is cranking out production runs of material designed by people 5 levels away from the nuts and bolts of the actual product.

Creativity is not innately replicable by AI. ANd the same goes for true systems understanding that your DevOps and development teams need to have. The illusion of knowledge and the ability to retrieve answers* is not the same as obtaining, retaining, being able to teach and utilize knowledge in an orchestrated fashion to solve novel problems (ie. problems without known solutions in the LLM training data) involving disparate contexts and subjective measures of nuanced model behavior.



These are but a small sample of the library of exceptions, inconsistencies and errors you will see in Power BI and "Fabric"


And this is just IT, folks.

Wanna see another ad? Wanna have your browser surreptitiously download another 20MB of your demographic and personal behavioral data for a consortium of ad tech companies and their data brokers?

I sure as hell don't and I firmly believe a better web is possible but big changes are needed and the inability of the masses to move away from being trapped in exclusive, expensive walled gardens is far and away the greatest impediment to diversity of and a new infusion of creativity into the web experience.

There are glimmers of future possibilities: all of the open protocols that got here, the AT secure data portability protocol and fully offline-managed products like the ones that software developer and vendor, Christian Stevens, develops- an awesome completely extensible SSRS/PBI enterprise reporting product made wholly for offline usage

A lot of this can be traced back to other similar paradigm shifts in computer history (thin client vs. thick client):

"Should we deliver executable code to the client or have the server do all the work?"

"Should we charge people to use the exorbitant punch-card machine or let them purchase personal computing machines that require no usage charges other than electricity to power the device?"

See that it is a matter of sales, consumer preferences (lab mainframe with a collection of directly/closely connected individual terminals in the same lab or a collection of remotely connected individual office/home PCs?) and space utilization. Mainframe computers (or at least SAN disks) will always be around as a "central source of truth" for computers that wish to search a large source of data.

But if we want our own mini-main frames, cannot we simply own them and be able to customize at least some of the software and content we run on them- without being hounded by license terms and upgrade sales pitches, in-app purchases, and DLC offers and other aggressive money-getting tactics that diminish the great thing that is this internet we have collectively created?


Real Estate

With the rise of private equity getting into real estate transactions (thanks, Airbnb and VRBO, etc.), the percentage of owner-occupied single-family homes is shrinking fast.

It is in the best interest of everyone involved in the cash flow and debt-fueled transaction maximization game (capitalism) for everyone to constantly be in debt to someone else. This is why hedge funds and private equity have recently been so interested in corporate ownership of housing assets ("cash offer tomorrow!"- I know you've gotten the letter...).

A housing asset that is either bought entirely with cash up front or whose mortgage has been paid in full might still appreciate in value each year, but it is largely an "unproductive" asset (in the eyes of banks) that could be made far more "productive" if it is continuously rented rather than mortgaged for a fixed number of years and then owned as a place to simply: live.


Video Games

The death of physical video game media has been particularly mind-numbing for video game enthusiasts. Home video games, which followed the death of the public square arcade machine mode of consuming video games, have all but been replaced by digital subscriptions and digital content license agreements. Steam, PS4, PS5, Nintendo and XBox are all rapidly moving to digital-only formats.

Even the physical games have little portability and require large installations to the consoles which means, you can't even possess more than a dozen or so PS5 games for instance, unless you want to delete some installed game space to make space for another game- despite that game being physical; and despite the fact that once upon a time, a physical game on a cartridge or disk did not install a huge ROM footprint of itself onto your console.

You used to be able to just buy and rent games and play them. (now you get to experience the joy of "Are you ready to live the adventure? Set up a new online account with your personal Microsoft or Google ID we can glean troves of information from so that we can (unsettling-ly) accurately target you to sell you more stuff or persuade you to donate to or vote for someone whose organization or campaign buys this data we now have!" 🤡🤑) after the second or third cut scene to begin the game...

What a world we've become enmeshed in, huh? Should we tell the salespeople and subscription-number-obsessed investors to slow down? Or what really is the best strategy to change this mine-stripping, devoid-of-aesthetics-and-user-sentiment direction because it is not a sustainable one if sustainability means retaining truly enjoyable and memorable entertainment for consumers who actually consume the things attached to all these gosh-forsaken subscriptions...


Music

Increasingly our music consumption is now completely non-physical, and not even available on-demand as digitally physical downloads! And to find a link to a service where you can actually purchase the album digitally and give your money directly to the artist who poured their heart into that music you love and want to reward them for?

Good luck. The artist might get $1 of your $20 purchase.

In the best case, the artist of the album you are buying will have a PayPal or Patreon link on their fan page. It a well-known sad fact that artists make almost nothing from album sales on the iTunes and streaming model and are forced to make nearly all of their money from selling merchandise and show tickets while constantly touring.

Lots of rest for the asset owners and the people with their names in the most prominent places of contracts. Very little rest (and job security) for the rest of us.

There are encouraging exceptions (which will hopefully become standard practice) from companies like Pluralsight and Amazon and Netflix that allow for (in many cases very limited, but available nonetheless) physical downloads of videos to physical devices for offline usage.


Movies

But then there is the pernicious and painfully temporary case of "licensing". Don't you just love it when you are super psyched to see a movie on your Prime or Netflix watchlist only to activate the movie tile for the detail screen which then states something along the lines of, "We're sorry but this title is no longer available due to content agreements".

Fun stuff, huh... An ephemeral future that changes in the sands of time as the marketing analysis systems output new viewership metrics and multi-million dollar ceremonial meetings are had where congratulations are privatized or failure is socialized and quick-buck, short-sighted decisions are made which makes the 1977 animated film The Hobbit, without warning, no longer available for you to show your kid this Friday night.

Even though you paid your subscription fee! 😂

But alas! Hope springs, for yet another little fee, of course... Would you like to rent the 1977 The Hobbit film for $9.99? Or buy it for $11.99 (increasingly these values are not static or currency-based- they are tailored to a statistical model (a multiple regression model, basically) of your consumer data profile which determines the price ranges at which you are most likely to make a purchase at that moment (called "dynamic pricing", using ill-gotten data all about you and what makes you tick)... 😃

It would be nice to see a future with portable mini BlueRay discs and mini PS5 discs or USB-sized plug-and-play chips for all manner of media and truly extensible software that we can just, y'know- use, on at least a semblance of our own terms, and- enjoy (sans a barrage of advertorial crap trying to extract yet another buck from our lint-riddled pockets).

I think most of it boils down to control.

Subscriptions are easy to control. They are predictable. They are centralized and essentially just a bunch of database records of a "read-only" content license agreement.

At least when you purchase the digital audio of a musical album, you are downloading the physical bits of the album audio to your client machine. You bought them and expectedly, you physically possess them.

With subscriptions systems like Prime Video, you are blindly hoping that the "content license agreement" is still valid so that the link within Prime Video's app will work. Not exactly the "power of the consumer" on display here...


Someday, we'll stop putting up with forced consumption of shoddy and "revenue-designed" products


It may well be that subscriptions are easy to control and that is that and enough to end the argument for finance, operation and chief execs whose thumb weighs most heavily on the matter. 🤷

No more well-thought-out, planned and executed version-based upgrades driven by user feedback, just continually predictable ARR via 'dem subs.

This way isn't working any better than what we had before. In many respects (not just the growing cost)- it is making things much worse. At least it is getting us offline a bit as things noticeably degrade as we're asked to pay more and more and more for more subscriptions to things that we will never have much true ownership or control of.

But we can always dream of something better, know? 🌙



MUSICAL CODA



*https://en.wikipedia.org/wiki/Chinese_room


Power BI's two best kept secrets: the PBIRS REST API and Power BI REST API

PBIRS REST API (public, completely customizable API)

If you use PBIRS to publish PBI reports to a centralized portal, or just want the ability to programmatically control your PBI development, deployments and system maintenance, there is a PBIRS API that you may not be aware of that can supercharge your PBI development environment.


It is not published but it is completely documented on SwaggerHub.com


It bears a close resemblance to the original SSRS v1 and v2 APIs, but in addition to all the SSRS functionality, it provides functionality for managing PBI reports, data sources, PBI data refreshes (data is refreshed on demand in SSRS reports), scheduling of PBI reports, managing uploaded ExcelWorkbooks and many other really useful features that developers can leverage to get the most out of your Power BI environment.


Publishing, updating PBI reports, data sources, posting ExecutionLog entries and more is made available via the PBIRS API



Power BI REST API (MSFT proprietary API)

And then there is the all-powerful Power BI REST API which serves as a successor to the ReportExecution2005.asmx and ReportService2010.asmx Reporting Services SOAP APIs that the original SSRS REST API was built upon. 

This API is not publicly documented (the SDKs are, however, which suffices for most usage scenarios) and not as extensible as original the SSRS REST API (ie. you need to authenticate with Entra and an online MSFT Power BI account; no custom authentication is possible), but it provides most all of the abundant paginated report and data source functionality in the original SSRS SOAP API along with a cornucopia of new API operations for managing Power BI users, workspaces and content.

The following is an example of using the Power BI REST API with PowerShell (using the MicrosoftPowerBIMgmt PowerShell module, if connecting via .NET you'd use the Microsoft.PowerBI.Api .NET library/Nuget package; an example of using the Power BI REST API in .NET can be found here):


This demonstrates getting a list of PBI workspaces, reports and getting an individual PBI report by name


With these two APIs organizations can continue to manage their SSRS/PBIRS environments and start managing their cloud-based Power BI environments- programmatically.


References: 

https://app.swaggerhub.com/apis/microsoft-rs/SSRS/PBI3.0

https://learn.microsoft.com/en-us/rest/api/power-bi/reports 

https://github.com/Microsoft/PowerBI-CSharp

https://github.com/microsoft/PowerBI-Developer-Samples/blob/master/PowerShell%20Scripts/Export-PowerBIReport.ps1



The slow death of SSRS and future of "PBIRS"

Microsoft has announced the inevitable- SSRS is not long for the world.


SSRS is now PBIRS and sadly, after 2033, PBIRS is likely going away in favor of costly, subscription-based MSFT reporting


There will apparently be no new features for RDL-based paginated reports moving forward unless MSFT changes course. All MSFT investments in data visualization and business intelligence are going to Power BI and other "Power Automate" tools.


For over 20 years, SSRS and RDL-based paginated reports have served a vital role supporting business intelligence and data visualization


This is not entirely a bad thing but I do have some thoughts on the sad reality that is the current state of Power BI, namely- its massive feature and extensibility limitations with respect to its predecessor, SSRS.

The first big one is report access. SSRS reports were available to anyone in the enterprise. And with custom authentication like extRSAuth, reports could be made available to any logged-in SaaS customer or otherwise authenticated client- for free. Most everything in Power BI requires a monthly subscription.


Note that the "Free" pricing tier has significant limitations (not very useful to develop reports in isolation...)


The second big one is scheduled reports and report archiving for auditing and comparison purposes via report snapshot functionality. Scheduled reports and snapshots are made possible via the PBI Report Server on-prem engine, but as the PBIRS on-prem engine is only supported through January of 2033 the question for organizations considering continuing with RDL-based schedulable and snapshottable reports is- "will we be cut off (unsupported) after January 2033?".

Sadly, everything is moving to a subscription-based model and this has everything to do with short-term "value demonstration" and the prioritization of short-term profits over long-term product excellence and long-term customer satisfaction. (more on this in a future post...).


Not an ideal way to present an external customer-facing report...

If I had to make a bet on the future, based on MSFT's current avaricious and short-sighted, "Subscription-and-AI-everything-customer-opinion-and-developer's-be-damned*" business direction- SSRS and its successor PBIRS will be completely phased out after 2033 and the only option will be Power BI reports, with Power BI offering some expensive, newfangled version of schedulable .pbix reports. Probably called something ridiculous like "Fabric Delivery Service". I doubt they will continue to support snapshot auditing capabilities, but they should.

Lastly, a sad consequence of the universal move away from code sharing, "actually free/unlimited use" software and software extensibility in general, is that Power BI binary files (.pbix) cannot be utilized outside of being decompiled by a Power BI editor. In the heydays of SSRS, you could view any .rdl, .rsd or .rds file and immediately inspect a report, dataset or data source (XML) file and make edits on the fly through a text editor or an API. This is no longer possible.

There have been innumerable SSRS scripts implemented at organizations to update large batches of data sources, datasets and reports to point to new data sources, data fields or to make mass updates to column text, report labeling or table definitions. So the removal of this functionality is kind of a big (raw) deal.


Paginated RS Reports (.rdl)  

RDL report files are XML-based and report definitions are clearly defined in the files; fortunately PBIRS is supporting paginated reports and the PBI Report Server database and engine for several more years.


Interactive PBI Visualizations (.pbix)


PBI report files are illegible compiled binary code; report definitions can only be decompiled, viewed and modified through tools like the online Power BI editor or downloadable Power BI Desktop programs. PBI interactive reports are the MSFT-recommended approach for all data reporting (except apparently, their own as is demonstrated below in the example of a SSMS 21/SQL Server 2025 standard, RDL-based database report).


There is a long way to go before SSRS reports disappear from the MSBI landscape completely however; SSRS will continue to be supported until January 11, 2033 according to Microsoft's recently posted Reporting Services consolidation FAQ.

In fact, if you look at Microsoft products like SSMS 21, you'll see regular old SSRS/RDL reports being rendered through the Report Viewer control when running reports for SSIS execution history, Job execution history, Database Standard Reports and many other SSMS reports.


Right-click any SQL Server database and you can view a suite of useful (if outdated looking) Standard Reports 




Ngl these reports look very 2008ish (3D is not recommended for serious dataviz)- but they are indeed SSRS/RDL


Comparing search terms via Google Trends it is clear that the push to Power BI accelerated in 2017 and has ramped up to the point where general interest in SSRS is negligent compared to interest in Power BI, despite SSRS offering robust, extensible on-prem report solutions for free and Power BI be buggy, considerably "locked down" and charging a relatively expensive monthly per-user subscription.


Google search interest in Power BI eclipsed SSRS in 2017 and has only risen since


But this is merely how marketing-sales-product singularity and product obsolescence works. If Galactus (MSFT) deems it so, it'll be so.


😕

😞



*we have come a long, long way from then-Microsoft CEO Steve Ballmer's infamous but earnest, "Developers!!, Developers!!, Developers!!" rant at a Windows conference in 2006. 😐


References:

https://www.mssqltips.com/sqlservertip/6867/ssrs-vs-power-bi

https://learn.microsoft.com/en-us/sql/reporting-services/reporting-services-consolidation-faq?view=sql-server-ver16


Storytelling with data

 
Each of these rules will help guide you to the delivery of a compelling and effective visual story



U.S. Presidential Elections 1900-2024

A picture really can depict 1000s of words



From the Industrial Revolution to WWI to the Great Depression to the New Deal to WWII to the Red Scare to the Civil Rights Movement to Neoconservatism to Neoliberalism to 9/11 to the Great Recession to MAGA, these small multiples charts beautifully encapsulate U.S. presidential elections and the attendant American political eras that fueled them in these past 124 years.



Major U.S. Economic Events

1929-1932 Great Depression

The gridlines are distracting and unnecessary but this chart, and the informational callouts, explain the stock market crash that caused the Great Depression




Post-WWII Boom

The United States was the biggest gainer among the countries whose GDP per capita spiked after WWII




Oil Prices and Inflation

The U.S. experienced huge inflation spikes in the 1970s due to oil price "shocks" and again in 2022 due to Russian oil sanctions and COVID stimulus




1980s Savings and Loan Crisis

Well over 1000 banks failed as a result of the money market and junk-bond deregulation that led to the S&L crisis; this hasn't happened before or since




Millenium Dot-Com Bubble

Between 1998 and 2002 the NASDAQ rose from ~2000 to over 5000 only to come crashing back to just over ~1000 by the end of the bubble burst




2007-2009 Great Recession

Due to internationally linked financialization, the Great Recession impacted not just the U.S. economy, but economies across the world




2020 COVID and U.S. Unemployment

This graph illustrates the impact that COVID had on U.S. unemployment, which subsided once vaccines were developed, re-opening economies worldwide 




Music Sales

Fascinating composition bar chart showing how music sales have shifted from vinyl to cassettes to CDs to mp3s to streaming



Whenever you present a story about data you will invariably be displaying some values (along a time series axis, or in static/isolation) within a categorization-based visual. The four primary chart types are Comparison, Relationship, Distribution and Composition. We will briefly pose the questions that illustrate what each of these chart types aims to answer.
  • Comparison: How much of each subgroup exists in relation to the other subgroups?
  • Relationship: How did a value change over time? (or change in relation to some other non-temporal metric like "how are various foreign currency exchange rates impacted by the movement of the U.S. federal funds (interest) rate?")
  • Distribution: What is the concentration of values within different percentiles if you chart the data along a linear scale?
  • Composition: What are the sizes of each of the constituent parts that comprise the whole of the thing you are trying to depict or explain?
  
Other key data visualization concepts to know and always be considering...:

Avoid Chartjunk: The goal should be to encode as much information as possible using near-exclusively "data ink", and as low a level of "non-data ink" as possible. Charts and graphs that contain excessive non-data ink (also called "chartjunk"), which is any chart content that does not communicate information relevant to your data visualization, are only going to confuse the consumer of your data visualization and hinder the expression of the message your visualization is meant to convey.

Chartjunk should be ruthlessly excised wherever it is found. Only include the data ink that serves the communication of your data visualization. All extra clutter will detract from and degrade your dataviz and your message- which is the entire purpose of graphs and charts.

Know Your Audience: It is important that you know your audience. A chart presented in a scientific or academic journal is often expected to contain values derived from complex ratios and formulas and labeling using esoteric language; a chart presented for general consumers in a newspaper or magazine is not. You should have an idea of what the baseline expectations are for the data you are presenting and ensure that you communicate your visualization in a way that is easy for your target audience to understand. 

Data Integrity: Many charts have been used as propaganda and to otherwise mislead people. This is done by using outright fake data or trying to elicit specious insights from thin data sets that do not provide a complete picture of what a particular data point or set of data points means within the context of other data it is a part of.  



References:











Embedding RS reports, HighCharts, and PBI interactives in ASP.NET Core MVC views


SSRS embed
 @model ReportView  
 <script>  
 </script>  
 <div class="container" style="background-color:#ffffff">  
   <section>  
     <div style="background-color:#ffffff; box-shadow: 5px 10px 8px #888888;">  
       <iframe height="800" width="900" src="@Model.SelectedReport.Uri" class="body-box-shadow"></iframe>  
     </div>  
   </section>  
 </div>  
This is the entire view of _Report.cshtml which renders the RS report; see the extRSAuth project for how to enable non-Windows AD SSRS client authentication



The <iframe> is rendered with the URL of the report on your report server which renders a ReportViewer control view of the report



HighCharts embed
 <script src="https://code.highcharts.com/highcharts.js"></script>  
 <script src="https://code.highcharts.com/themes/adaptive.js"></script>  
 <head>  
   <script>  
     $(document).ready(function () {  
       Highcharts.seriesTypes.line.prototype.getPointSpline = Highcharts.seriesTypes.spline.prototype.getPointSpline;  
       Highcharts.chart('potusApproval', {  
       title: {  
         text: 'Trump Job Approval',  
         align: 'left'  
       },  
       subtitle: {  
           text: 'Source: <a href="https://api.votehub.com/polls?poll_type=approval&subject=Trump" target="_blank">VoteHub</a>.',  
         align: 'left'  
       },  
       yAxis: {  
         title: {  
           text: 'Approval'  
         }  
       },  
       legend: {  
         layout: 'vertical',  
         align: 'right',  
         verticalAlign: 'middle'  
       },  
       plotOptions: {  
             area: {  
               pointStart: '1/1/2025',  
               relativeXValue: false,  
               marker: {  
                 enabled: true,  
                 symbol: 'circle',  
                 radius: 2,  
                 states: {  
                   hover: {  
                     enabled: true  
                   }  
                 }  
               }  
             }  
           },  
       series: [{  
         name: 'Approve',  
         data: [ @string.Join(", ", Model.HighChartsModel.Approves) ]  
       }, {  
         name: 'Disapprove',  
         data: [ @string.Join(", ", Model.HighChartsModel.Disapproves) ]  
       }],  
     });  
   });  
   </script>  
 </head>  
 <table style="width: 100%; height:50%">  
   <tr><td><div id="potusApproval"></div></td></tr>  
 </table>  
The same data can easily be embedded as a HighCharts visual using some JS and HTML; this example uses the simple HighCharts LineChart


The above HighCharts embed code renders this line chart



Power BI embed


The easiest Power BI embedded method is to use the Developer Playground "demo code" script; select File >> Developer Playground



Next, click the "Set up now" button on the upper right side of the following screen




Here you are presented with the embed <iframe> script that you put into your view... 



 <iframe title="PBI_Report" style="width:100%; height:73%" src="https://app.powerbi.com/reportEmbed?reportId=695fe0f1-5c9e-497d-8913-e59f0b939ac4&autoAuth=true&embeddedDemo=true" frameborder="0" allowFullScreen="true"></iframe>  



And, voila! You have a Power BI visual embedded inside your web app now



Reference: https://learn.microsoft.com/en-us/power-bi/developer/

Source: https://github.com/sonrai-LLC/extRS/tree/main/ExtRS.Portal | https://extrs.net


SQL Server 2025's sp_invoke_external_rest_endpoint with OPENJSON CTE for quickly and easily getting data from REST APIs

SQL Server 2025 introduces a convenient way to get data from a REST API endpoint directly through T-SQL and SQL Server utilities.


Outlined in lime green are the two items SQL Server 2025 handles well, discussed in this post


Prior ways of doing this usually involved using MSXML2.XMLHTTP (a COM object provided by Microsoft XML Core Services) through extended stored procedures, but with MSSQL 2025, there is a new SP, sp_invoke_external_rest_endpoint that is very readable and easy to use to get JSON (or XML) from an API response.

This brief article describes what an SP to get this data may look like, as well as the code to parse the JSON in the response to format the result as a table (vs. sending back all the JSON for the client to parse).

Here is an SP which fetches polling data for the Approval Polling data on current U.S. president Donald Trump:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:	colin fitzgerald
-- Create date: 20250625
-- Description: SP to fetch data from VoteHub API
-- =============================================
CREATE OR ALTER PROCEDURE dbo.sp_GetVoteHubPollingData
	@LongView BIT = 0
AS
BEGIN
SET NOCOUNT ON;

EXECUTE sp_configure 'external rest endpoint enabled', 1;
RECONFIGURE WITH OVERRIDE;

DECLARE @ret AS INT, @response AS NVARCHAR (MAX);

EXECUTE
    @ret = sp_invoke_external_rest_endpoint
    @url = N'https://api.votehub.com/polls?poll_type=approval&subject=Trump',
    @headers = N'{"Accept":"application/json"}',
    @method = 'GET',
    @response = @response OUTPUT;

;WITH ResponseContent AS
(SELECT [key], [value] FROM OPENJSON(@response)),
 ResponseJson AS
(SELECT [value] FROM OPENJSON((SELECT [value] FROM ResponseContent WHERE [key]='result')))

SELECT --value,
--id,
pollster,
[subject],
poll_type,
sample_size,
created_at, 
approve,
disapprove
FROM ResponseJson
OUTER APPLY OPENJSON(value) WITH(
  id nvarchar(255), 
  pollster nvarchar(255),
  [subject] nvarchar(255),
  poll_type nvarchar(255), 
  sample_size int, 
  created_at datetime,
  approve decimal '$.answers[0].pct',
  disapprove decimal '$.answers[1].pct'
)
WHERE created_at >= CASE WHEN @LongView = 0 THEN dateadd(mm, -3, getDate()) ELSE created_at END 
ORDER BY created_at DESC

EXECUTE sp_configure 'external rest endpoint enabled', 0;
RECONFIGURE WITH OVERRIDE;

END
GO


And here is the design view of the data source for a report using this polling table data:



And here is the design view of the report that will use this data:



If we CREATE dbo.sp_GetVoteHubPollingData as stored procedure on a database (in this case, I created it in 'master') that our data source connects to, then we can deploy the report to a Report Server or Power BI Report Server and run it:


This is the report as rendered within Power BI Report Server's Portal using extRSAuth for authentication and authorization





This is the report as rendered within extRSAuth custom PBIRS reporting portal on extrs.net 



Lots of neat stuff you can do with the new features of SQL Server 2025- check 'em out.

Next up: embedding a PBI version of this report in extrs.net, and embedding a HighCharts JS version of this report in extrs.net- all using this dbo.sp_GetVoteHubPollingData SP that uses sp_invoke_external_rest_endpoint.


References:

https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-invoke-external-rest-endpoint-transact-sql

https://learn.microsoft.com/en-us/sql/relational-databases/json/convert-json-data-to-rows-and-columns-with-openjson-sql-server