|
As far as I know you cannot create a primary key without including all the columns in distribute list. So basically you either have to:
- include ID in the distribute list
- define the primary key using IDTEN and YEAR and ID
|
|
|
|
|
ok, thanks
MCP.NET, MCAD.NET, MCSD.NET
|
|
|
|
|
Hi,
After processing your ETL package which loads data into the cube, how do you ensure that your cube has been processed?
Current
|
|
|
|
|
Surely the last step in your ETL package is to call the processing method of the cube! (seems obvious but I don't deal with cubes so I may be completely wrong).
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
current1999 wrote: After processing your ETL package which loads data into the cube, how do you
ensure that your cube has been processed?
Well it depends on what you are looking for in confirmation.
1: Confirmation of last successful processing
1.1: If the SQL Server agent is processing your cubes, then you can set the agent up to send out an email on completion. This will tell you if the process completed successfully or failed. The only caveat is if you run the job as a SQL Server Analysis command, then the agent wont know if the command failed or was successful. Just make sure to run your commands as a SSIS package and there wont be any issues.
1.2: In addition to agent notifications I use a modified version of the Microsoft SSAS example, AMO Display Object Names. I modified it to read the structure and send me an email with last processing date / times of the cubes and dimensions.
Info: http://technet.microsoft.com/en-us/library/ms160876(SQL.90).aspx
Had to remove some of the code as it contained company info in it, but here is the juxed of it
try
{
foreach (Database db in server.Databases)
{
Console.WriteLine("{0}", db.Name);
Console.WriteLine("\tDimensions:");
foreach (Dimension dimension in db.Dimensions)
Console.WriteLine("\t\t{0}", dimension.Name);
Console.WriteLine("\tCubes:");
foreach (Cube cube in db.Cubes)
{
Console.WriteLine("\t\t{0}", cube.Name);
Console.WriteLine("\t\tMeasure Groups:");
foreach (MeasureGroup group in cube.MeasureGroups)
{
Console.WriteLine("\t\t\tGroup Name: \t{0}", group.Name);
Console.WriteLine("\t\t\t\tSource: \t{0}", group.Source);
Console.WriteLine("\t\t\t\tCreated: \t{0}", group.CreatedTimestamp);
Console.WriteLine("\t\t\t\tLast Proc: \t{0} ", group.LastProcessed);
Console.WriteLine("\t\t\t\tEstimatedSize: \t{0} ", group.EstimatedSize);
Console.WriteLine("\t\t\t\tStorageLocation: \t{0} ", group.StorageLocation);
string sState = "None";
switch (group.State)
{
case AnalysisState.Processed:
sState = "Processed";
break;
case AnalysisState.PartiallyProcessed:
sState = "PartiallyProcessed";
break;
case AnalysisState.Unprocessed:
sState = "Unprocessed";
break;
}
Console.WriteLine("\t\t\t State: \t{0}", sState);
Console.WriteLine("\t\t\t\t Type: \t{0}", group.Type);
foreach (Measure meas in group.Measures)
{
Console.WriteLine("\t\t\t\t\t Name: \t{0}", meas.Name);
Console.WriteLine("\t\t\t\t\t\t Expression: \t{0}", meas.MeasureExpression);
Console.WriteLine("\t\t\t\t\t\t Aggregate: \t{0}", meas.AggregateFunction);
Console.WriteLine("\t\t\t\t\t\t DisplayFolder: \t{0}", meas.DisplayFolder);
Console.WriteLine("\t\t\t\t\t\t Source: \t{0}", meas.Source);
Console.WriteLine("\t\t\t\t\t\t DisplayFolder: \t{0} ", meas.DisplayFolder);
}
foreach (MdxScript mdx in cube.MdxScripts)
{
string MeasureName = mdx.Name.Replace("[MEASURES].[", "");
MeasureName = MeasureName.Replace("]", "");
Console.WriteLine("\t\t\t\t\t Name: \t{0}", MeasureName);
Console.WriteLine("\t\t\t\t\t\t DisplayFolder: \t{0} ", mdx.Annotations);
}
}
}
Console.WriteLine("\tMining Structures:");
foreach (MiningStructure miningStructure in db.MiningStructures)
Console.WriteLine("\t\t{0}", miningStructure.Name);
}
}
finally
{
server.Disconnect();
server.Dispose();
}
}
catch (AmoException e)
{
Console.WriteLine(e.ToString());
}
2: Validating the data, that’s a whole task all unto it self. I used to do this with a SSIS package that would run a MDX query and send the results from that. However, I found that just making sure everything processed correct really solved this issues we where having.
Common sense is admitting there is cause and effect and that you can exert some control over what you understand.
|
|
|
|
|
hello all. I've got a ssrs 2008 question that has been bugging me for a couple of months. I have built a site for my HR department that takes in applications. HR takes the information and needs to send it to Directors and Supervisors in an application-style form. I was planning on using SSRS mainly because I can just render the application in a pdf by just using the url, which HR could just email to whomever they want to. This would all work fine if all of our HR employees were on the same domain, but they are not and the system admins for some of the domains don't want to build a trust to us, so I can't just tie their domain account to the security of the application report (some of our sites may not even have people on domains).
What I was looking for was a way to have an account on the server itself be the one to run the report so that the user wasn't prompted for login credentials when they looked up an application.
|
|
|
|
|
If you are using the server component of SSRS then I'm pretty sure you cannot allow anonymous connections, valid credentials are (should) always required by an internal server.
However there is no reason you can't host the reports in a separate aspx application using the internal app credentials to contact the server.
You could also change the reports to RDLC and embed them in an aspx application where the app fetches the data and supplies the viewer the RDLC file and the dataset, this requires the aspx app to have database credentials but not the end user.
Both solutions are terribly insecure and you need to carefully consider the business implications.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
This is a tricky situation, all these different domains have to build some kind trust or all the users who would be accessing these reports can be moved to a different domain altogether which you can use in your application. In that case you can give access to the users of this New domain.
There is not shortcut here which can resolve this, either you use trusted users or use a proxy user to fetch reports for all the users consuming these reports.
Hope it helps...
With kudos,
Pradeep
|
|
|
|
|
Using a proxy user, how would I do that? Could I use a service account on the server to run those reports?
|
|
|
|
|
Yes...that's how you can achieve it. Meanwhile I got one more option in case if you are using SQL Server 2008 R2, you can create a subscriber database for the users who would access these reports and link all of them with your reports...this is something you can try....I would post some more details once I get more insight on this....
http://msdn.microsoft.com/en-us/library/ms169673.aspx[^]
with kudos,
Pradeep
|
|
|
|
|
that crossed my mind, but would that work if I'm using form auth?
|
|
|
|
|
|
I was not able to edit the existing reply...here is sample code:
Use this in the web.config:
<forms name="Testproject"
path="/"
loginUrl="~/Login.aspx"
protection="All"
timeout="20"
requireSSL="false"
slidingExpiration="true"
defaultUrl="Home.aspx"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<identity impersonate="true" userName="domain\user" password="xyz@123"/>
with kudos,
Pradeep
|
|
|
|
|
No offense, but most production systems that I've ever worked on would consider embedding a password in plain text in a file, a security violation and not allow it. Even if that file is on a server with access permissions.
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
I agree Chris..this was just to show how impersonation can be done using Forms authentication.
This section can be easily encrypted using one of these methods:
http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx[^]
Thanks for raising the point tough...
with kudos,
Pradeep
|
|
|
|
|
Hi
Does anyone know how to make aplhanumerical sorting for SQL Server CE ?
CE does not support Isnumeric-function, so it cannot be used.
CE version is 3.5, VisualBasic 2010 does not support CE 4.0.
jtpaa
-- Modified Thursday, August 4, 2011 7:28 AM
|
|
|
|
|
Did you check this google result[^]?
I Love T-SQL
"VB.NET is developed with C#.NET"
If my post helps you kindly save my time by voting my post.
www.cacttus.com
|
|
|
|
|
Hi
Yes, I have searched this topic with google.
But I have not found usable solution.
If You check those google results and if You find something useful, could You then send notification
jtpaa
|
|
|
|
|
Dear
Get the list of Customers where Company Name's 2nd letter is Consonant. (Table: Customers)
i am using northwind database.plz tell me how to solve that problem.
any comments are highly appreciated.
Shafik
modified on Thursday, August 4, 2011 3:45 AM
|
|
|
|
|
What have you tried?
Are you using SQL? ADO.NET? LinQ?
Lobster Thermidor aux crevettes with a Mornay sauce, served in a Provençale manner with shallots and aubergines, garnished with truffle pate, brandy and a fried egg on top and Spam - Monty Python Spam Sketch
|
|
|
|
|
You haven't mentioned what database you are using. For MS SQL Server, it would be:
SELECT * FROM Customers WHERE SUBSTRING(CompanyName,2,1) NOT IN ('a', 'e', 'i', 'o', 'u')
|
|
|
|
|
What is the second character in the computer name is not a letter, like O'Darby?
|
|
|
|
|
Oh, well then...
You'll need two more tables:
CharacterClass
ID CharacterClass
1 Vowel
2 Consonant
3 Digit
4 Symbol
5 Whitespace
Character
Character CharacterClass
A 1
B 2
...
Then simply JOIN. ![Jig | [Dance]](https://codeproject.global.ssl.fastly.net/script/Forums/Images/jig.gif)
|
|
|
|
|
PIEBALDconsult wrote: Oh, well then...
You'll need two more tables:
I know that.. I wanted others to think the answer through...
|
|
|
|
|
Chances are the O' folks never made it into the database because parameters were not used for the input, and no one did a .Replace("'","''") on the SQL string, so it's not an issue.
|
|
|
|