SSIS 2012 OLE DB vs EXCEL dynamic worksheet creation - excel

I have a Web Service call that returns reporting data using Linq-To-Entity (strongly type class list). I connected this task to a foreach loop container with a Execute SQL Task. I have come to a crossroad as to what approach I should take on whether the OLE DB connection or to use EXCEL. The server [W2k8 R2] does not have Excel installed (we want to avoid that as much as possible).
15 worksheets would have the same schema info (each sheet is a per client basis) while the last worksheet is a summary and has a different schema. The summary has its own strongly typed class as well.
The end goal is to pass that report data into the xlsx file then to an SMTP task as an email attachment.
Would I be better off creating the Excel Tables in a script task using OLE DB or using EXCEL connection?
Using SSIS with SQL Server 2012

You might want to take a look at report subscription and delivery with SQL Server Reporting Services. Might be an easier and more maintainable way to implement your requirement (msdn).
Not sure what you mean by an EXCEL connection, but if it's the connection manager in SSIS, then an EXCEL and OLEDB connection are practically the same thing. The EXCEL connection manager uses the Microsoft OLE DB Provider for Jet 4.0 (msdn).

Related

Self-updating spreadsheet

Is it possible to create a spreadsheet that updates itself on a regular basis (daily, bi-weekly or monthly)? We use PostgreSQL. The content of the sheet is going to be based off a query I wrote.
What's the easiest way to connect an Excel spreadsheet to Postgres?
So far I have looked at:
A Microsoft product: https://support.office.com/en-us/article/Connect-to-a-PostgreSQL-database-Power-Query-bf941e52-066f-4911-a41f-2493c39e69e4
PostgreSQL's ODBC: https://odbc.postgresql.org/
However I can't find a clear explanation of how I am practically going to set up the spreadsheet.
A quick high-level explanation to connect excel to a database:
You can connect to a ODBC enabled DBMS's view or table using Excel's Get External Data buttons. Specifically in the Data tab, the From other Sources button.
To use this, you need to create a new DSN for your connection. Start>>"Search Box">>ODBC and use the 64-bit ODBC administrator to create a new System DSN. The DSN is the thing that will hold your ODBC connection's information, like the server address, username, password, etc...
Back in Excel you click the From Other Sources button in the Data tab and pick that DSN you just made. Then you can find the View you generated in Postgres and tell it which range you want to dump the data. That range then will hold the connection information so you can refresh any time you want.
Then, when you open the workbook you can just refresh the connection and pick up new data lickety-split.
There's other ways to connect Excel to ODBC and OLEDB enabled databases like using ADODB in VBA, but that's more complicated and probably overkill for you needs.

SQL Server and Excel

I want to link an excel file to SQL Server 2014 whereby I can edit the file and the data gets updated on the server automatically.
Similar to what happens when you link sql server to Access whereas you can edit the data and the changes take effect in the server.
Thanks in advance
There is no out of the box solution for this. You can do this either of two ways:
Write a C# code which has a file watcher attached to the Excel file which uploads the Excel file using SSIS job to the database.
Create a scheduled SSIS job which imports the Excel file periodically.
Understanding the purpose would allow for greater elaboration.
This depends on the type of data you wish to edit.
For master data, if you have the Enterprise or Business Intelligence edition of SQL Server and Master Data Services set up, there is a plug-in for Excel:
https://msdn.microsoft.com/en-us/library/hh231024(v=sql.120).aspx
For transactional data, I would strongly advise against using Excel as a front-end and would recommend you to consider alternatives.
However, if you are compelled to go down this route, you can achieve this using VBA scripting and linking via a DAL (Data Access Layer) such as ADO.NET. Be aware that giving such power to your users could open up your system to sql injection attacks - only proceed so if you trust the users 100%. Another thing to take into consideration is validation checks - validation checks should be applied to every cell where data can be entered. More information can be found here:
https://support.microsoft.com/en-us/kb/316934

Refreshing Excel Data connection on a Windows Server

I am running an automated Data job on a windows server that outputs a SAS dataset everyday. On top of this, I have an Excel Report connected via Excel's Local Data Provider.
My problem is, that the Data Connection needs to be manually refreshed by a person with SAS installed on their PC. I have tried writing a piece of SAS code that opens the Excel file on the server and then triggers a piece of VBA that did the refreshing, before closing and saving. This works perfectly if I'm logged into the server. But it doesn't seem to work if nobody's signed in. I believe this has something to do with having an active user session.
UPDATE
The process that I use to connect to a local data source from Excel, looks like this:
Data Connection Wizard
Select SAS Local Data Provider from OLE DB Providers
Add the Route to my SAS Dataset as data source
Select My source table and create a Pivot Report
Is there any way to do something like this?
When you want to run Excel unattended, thus no interactive user is logged on, you can do this with a Windows service. You have to ensure some settings for Excel, as well as it is important how you start excel.
Be aware of Microsoft does not support, or even suggest you to do something like this. Excel is a client software, it is exactly the opposite of a piece of software that is easy to maintain running as as service. Read this excellent article Considerations for server-side Automation of Office about the topic. Even when a little old (talking about Office 2003) it is still state of the art.
Please consider these conditions:
You cannot use the System or Network account, you have to let the windows service running under an account that at least have excel started once. This cannot be done with the named ones (as they cannot be used as interactive users)
Excel has to be opened at least once with the user under with the windows service account will run. You'll have to configure dcom settings, open vba once to initialize it, and most probably set some settings like "trust vba model" to be able to programmatically access Excel
last but not least when starting Excel you have to start it with loading the user profile. The Process.Start method in c# allows exactly that by just setting a boolean value to true.
Doing it like this, Excel should just start fine and update data connection with the VBA.
You may want to implement that windows service in c#, as it is really easy, have a look: Creating a Basic Windows Service in C#.
When using c#, be aware of you have to correctly dispose interop objects, pretty good described in How to properly clean up Excel interop objects

How do I expose Excel 2003 Spreadsheets to PerformancePoint 2007?

I am working on a PerformancePoint 2007 project. I have a bunch of Excel spreadsheets, and I need to get at the data. The users need to continue to enter data, they have Excel 2003, and I won't be here forever. If the users had Excel 2007 I could just use Excel Web Services in MOSS 2007, but that's a no go.
What are your recommendations for getting the data into a usable state?
Some options are:
create an SSIS package to import the data into SQL Server, and teach them how to run the package as time goes on
get the data into SQL Server (SSIS) and then build a web front-end that lets them enter new data
use Access as a proxy for getting the data into SQL Server and use its web access pages to let the users enter new data
Any other ideas? I've heard "Business Data Catalog" thrown about, but I'm not sure how it would help...
Thanks.
Here's what I did:
Create SharePoint lists that duplicate the spreadsheet functionality
Copy and paste the current spreadsheet data into the list
Tell them to throw away the spreadsheet and make their updates to the list (export to Excel if they need a special chart or something
Use Simego Data Synchronisation Studio to import the data into SQL Server on a regular basis
Point PerformancePoint to the database for analysis.

SSRS: Error while querying data from an Excel file (through ODBC)

I am trying to render a simple chart using SSRS. The data is in an Excel sheet. I have set up an user DSN and created a data source in SSRS using ODBC.
I am able to query the excel in Data tab. However while trying to preview, I get the following error:
error [hy000] [microsoft] [odbc excel driver] the connection for
viewing your linked Microsoft Excel worksheet was lost.
Anyone knows why this is happening and how this can be solved?
I would consider creating a SQL Sever Integration Services package to import the data from Excel to a SQL database and using the database as the data source for the report. The SSIS package could be scheduled to periodically refresh the data.
Using a file based data source like Excel is vulnerable to people modifying the structure of the spreadsheet and moving, deleting or locking the file.
Seems to be a fleeting error. I deleted the dataset, created a new one and re-ran again. It worked.

Resources