Published report can't connect to data source after I change the data source - tableau-api

I updated a report with embeded data, from SQL Server, to our company's Tableau Server. It worked perfectly. After that, the old SQL Server is going to be demised, thus I move all data to a new server, the database, schema and data are exactly the same, and update the data connection in my local reports. It still works well.
Then I publish it again with the same configuration. The publishion is successful. However, Tableau server shows error that the database can't be connected when I open the report. Any idea? Thanks in advance.
I just update the server, username and pass for all data connections.
Exception

If you are working from a published data source and you change information, such as the server connection details, you should re-upload the new data source - you may wish to also delete the old data source to avoid confusion.

The issue is because the Tableau Server does not have access for extracting data from the new server. Our Tableau Server will need a new account for the new server to extract data I needed. Thus, I need to raise a ticket to create such account.

Related

How to clear the data in a Power BI Report when publishing it to multiple clients via DevOps

We are building a generic Power BI Reporting suite for a product. Every time we commit the PBIX file to Source Control our DevOps project publishes the report to multiple workspaces, clears the SQL Connection, and reattaches it to the SQL database for each particular client. We then trigger a dataset refresh so that the report loads the data from it's own SQL database.
The problem is that the PBIX file committed to GIT contains the imported data from the LAST SQL data source it was connected to (usually our Dev SQL DB). Then when the report and dataset are published to each client the client will see this imported DEV data in their report for a period of 20 minutes or so until the dataset has refreshed, which is a security risk and confusing for the user.
I found this workaround using PowerQuery as an example, however I am really hoping for a more robust solution.
https://community.powerbi.com/t5/Desktop/Another-way-to-clear-fetched-data-from-PBIX-files/m-p/686627
How can we "clear" the imported data in the PBIX file so that when we publish to each client it is completely empty and just reloads that clients data?
Did you try a Powerbi API?
https://learn.microsoft.com/en-us/rest/api/power-bi/pushdatasets/datasets_deleterows
The ideal situation would be to be able to publish pbit instead of pbix (which contains data). Unfortunately, this is not allowed. If you can, vote for this or a similar idea.
https://ideas.powerbi.com/ideas/idea/?ideaid=b8928e24-3a1a-4a21-89d0-29fab9454a3c

Live/Extract: How to change Tabelau data source connection from live to extract on the server?

I created a tableau report, with custom SQL query, and used a live connection to connect to my database. I have published a tableau report. Is there a way to change the connection now to extract, via browser?
As far as I know, there is no such option. You have to create a local extract first and then publish it to the server.
I didn't find a way to publish without extract and change it from live to extract online.
I created an empty extract instead and populated it online as a work-around.

Crystal Report is keep asking for username and password

I have created an crystal report which connects with the ADO.net data set. It is working fine at my system.However when I am trying to use the same report in another machine.It is asking for database log in. Please help to resolve this issue. Feel free to ask if you need any more information regarding this issue.
Thanks
You have probably setup the connection to your database using pass-through authentication (or "Trusted Connection"). When running locally it's connecting as you, but when running on the server it's trying to connect to the database as the user that it's running as (probably a local user account).
Instead, create a new user on your database server and give it access to your DB. Then change your connection string to be something like:
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
and with a bit of luck you'll be in.
you can solve this error by:
1-get the data from database
2-store this data in dataset
3-set the datasource of report to dataset
4-show the report

Syncing iOS Core Data with remote server which sends XML

My app parses XML from remote server and store the objects in Core Data(SQLite storage). So that user can browse the material when OFFLINE by reading from local storage.
User may make changes to objects when browsing offline which gets stored locally in Core Data SQLite store. Another User makes some changes to object on Remote server and it is stored there. Now when I detect internet connection, my app should sync my local storage with remote server. Which means remote server is updated with changes I made to my Core Data(SQLite storage) when I was offline and my local storage - Core Data(SQLite storage) needs to be updated with what ever changes other user made to remote server.
For example there is a forum and it is stored in my local storage so that I can read and reply when I am traveling. When later on internet is accessible. My app should automatically put all my replies stored in core data to remote server and also bring other posts on remote server into my local storage.
Remote server is sending XML which I'm parsing and storing in Coredata. My problem is how to sync it ?
How both ways communication happens when there is a change?
How to sync only data which has changed and not to IMPORT whole remote server DB and vice-versa ?
I know one of the way to do it..
add one more field to your local and server database. i.e. Timestamp.
when user change data on the local database change the Timestamp to current time.
do same on the server..i.e. When someone edit data on the server change Timestamp to current time.
When user connects to internet... check local Timestamp to Server timestamp..
case 1 Both are same - Nothing to do
case 2 local time > server time - use sql to get all the data having timestamp greater than server timestamp.. and upload it on the server...
case 3 local < server .... get all the records greater than the local timestamp and add it to the local database..
I am not sure if there is any better way... but this surely works...
One solution could be
iphone syncs the changes to the server
server merges the new and old stuff
iphone gets the new changes (from the merge) from the server
So let the server be the master which should know how to merge stuff and the clients should only download the data incrementally after some changes.
Transactions. You want to follow the ACID rules for transactions. Essentially you have to make sure that data has not be updated that you have not refreshed locally before altering your local write to update.
So the easiest way is have a user get the most recent update from the server, then overwrite that and make sure that with timestamps no othe update happens during that process. Even better yet, use blocking with threads to insure that nothing else happens.
If you Google transactions or ACID there will be a lot of info out there. It's a big area in RDBMS environments where many users can corrupt the data and locks must be held between writes and updates.

Crystal Reports 9 Database Connection Issue

Crystal Reports 9 seems to save the database connection information inside the report file itself. I am having an issue changing that connection. I work with a team of developers who all have their own copy of a database on the same server. We are using Trusted Connections to the db. When we need to make changes to a crystal report, and we click the lightning bolt to execute the report, Crystal does not ask for login information to the database. It actually ends up connecting to the last database that was used when the report was saved last.
We came up with 2 workarounds:
Take the database that crystal thinks it should connect to offline, then crystal will ask for login info.
Remove permissions for the username that is making the crystal change.
Neither of these are acceptable for us. Does anyone know how to remove the crystal connection from the report file?
We have tried Log Off Datasource Location and all of the settings in the Database Expert.
UPDATE
I still have not found a solution that fits my case. But our newest workaround is to load up a crystal report and just before you click the lightning bolt (to run report against the database), unplug your ethernet cable. Then when Crystal cannot find the database, plug the ethernet cable back in and it will allow you to choose a different database server and name.
You could use a .dsn datasource file in a user-specific location (i.e. the same path for every user, but a different physical location) and point Crystal Reports at that. For example, on everyone's C drive: C:\DSNs\db.dsn, or on a network drive that is mapped to a different location for each user.
You can get more info on .dsn files on MSDN:
http://msdn.microsoft.com/en-us/library/ms710900(VS.85).aspx
We are using such way (using sql authentication however):
open report
database - log on server
database - set datasource location
refresh/preview
You may disable your [domain user] access to dev database, should help too :)
I am probably answering too late to have any chance at the bounty, but I'll offer an answer anyway.
If you are running the Crystal Report directly or with Crystal Enterprise then the only way I can think of to do this is by using a dsn as paulmorriss mentions. The drawback to this is that you'd be using ODBC which I believe is generally slower and thought of as outdated.
If you are using this in an application then you can simply change the database connection settings in code. Then, everyone can develop the report against their own test database and you can point it to the production database at runtime (assuming the developers database is up to date and contain the same fields as the production database).
To do this you should be able to use a function like the following:
private void SetDBLogonForReport(CrystalDecisions.Shared.ConnectionInfo connectionInfo, CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument)
{
CrystalDecisions.CrystalReports.Engine.Tables tables = reportDocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
CrystalDecisions.Shared.TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo);
}
}
For this to work you need to pass in a ConnectionInfo object (which will contain all of your login information) and the report document to apply it to. Hope this helps.
EDIT - Another option, that I can't believe I haven't thought of until now, is that if you are using SQL Server you can make sure that all of the development databases names are the same, then use "." or "(local)" for the server and integrated security so that everyone effectively has the same connection info locally. I think this is probably the best way to go assuming that you can get all of the developers to use the same setup.
EDIT Again :)
After reading some of the comments on the other answers, I think I may have misunderstood the question. There is no reason that I can think of why you wouldn't be able to do the steps in Arvo's answer outside of not having rights to edit the report, but I'm assuming that you've been able to make other changes so I doubt that is it. I assumed that to get the report to work for each developer you had been doing these steps all along.
Yeah I agree Crystal Reports is a pain. I have ran into the same problem in the applications that I have built that I was forced to use it.
1- Log off the server(inside crystal right click the database and log-off)
2- Click on the database and change the database location
If you are logged on and change the database location it doesn't seem to stick
You can set the logon at runtime. See this question...
How do I change a Crystal Report's ODBC database connection at runtime?
If you used ODBC, each dev could point their DSN at the appropriate database. Essentially pushing the connection string into the DSN and out of the crystal report.