Analysis :: Top N Rows Vary Depending On Reporting Layer?
Oct 16, 2015
trivial example, i have a tabular model for orderlines.Each line has a product.A product fits under a hierarchy Category > Product.I need to display the top N rows by quantity under each category. My can break down as follows: Warehouse, Product category, Product, PurchaserID
If im to do the top N in excel i use pivot table functions to get the top N by whatever measure i pick from the dropdown:I cant do this in powerbi builder though, as it works very differently, or powerview which again is done differently.Do i have to take a different approach depending on the report platform, or is there a way to do this in the tabular model that will work on any platform?
Hello, I am very new to SQL and ran into a problem using Access. I hope you can help me here. The question is the following: I have to tables: Table 4x4: CommodityCode(string)/NeedofBU(high,low) Table ASDBComplete: CommodityCode/Manufacturer/Rating(red,green,yellow)
What I want to get as a result is to display all ComodityCodes that have a 'red' rating and a 'high' NeedOfBU. So far no problem. But now there usually is more than one manufacturer for one CommodityCode. What I need now is that the CommodityCode is not displayed if there actually exist a Manufacturer with 'green' or 'yellow' rating. How would you do that? What I have so far is:
SELECT [4x4].[CommodityCode], [4x4].NeedofBU, ASDBComplete.CommodityCode, ASDBComplete.Rating, ASDBComplete.Manufacturer FROM 4x4 LEFT JOIN ASDBComplete ON [4x4].[CommodityCode] = ASDBComplete.CommodityCode WHERE ((([4x4].NeedofBU)="high") AND ((ASDBComplete.Rating)="red"));
But this gives me all the Commodities with red ratings. Even if there is a supplier with a green or yellow rating.
I would need somting like: if exists 'commodityCode.XY with 'manufacuturer rating = green OR yellow' do not display commodityCode.xy
I want to insert the rows automatically depending on the cell value in column from another table. Like if the value of cell "blabla" is 4 it automatically insert the 4 rows in my table with values.
I want to get a running total. But its a bit tricky. I have data depending on ID, YEAR, Month, Value like the following.
ID, Year, Month, Value 36002084 2014 Jan 8391 36002084 2014 Jan 0 36002084 2014 Jan 3440 36002084 2014 Jan 0 36002084 2014 Jan 548 36002084 2014 Jan 109 36002084 2014 Jan 125
I wrote the Query below
select [UEP ID],[Year],[Month],sum([Total VtM EUR]) 'Running Total' from RegData where [UEP ID]=36002084 and [Year]=2014 group by [UEP ID],[Year],[Month]
I got this output
36002084 2014 Apr 887620 36002084 2014 Aug 789440 36002084 2014 Dec 528453 36002084 2014 Feb 606627 36002084 2014 Jan 331613 36002084 2014 Jul 681314 36002084 2014 Jun 330384 36002084 2014 Mar 1044301 36002084 2014 May 671818 36002084 2014 Nov 465576 36002084 2014 Oct 590147 36002084 2014 Sep 527861
Now I need to get a output like this,
36002084 2014 Jan 331613 36002084 2014 Feb 938240
A running total depending on the ID, Year and Month. Although I showed this for two steps I need to get it from one query.
Question is - To get a running total based on ID, Year, Month. If I do the normal group by and sum query I could get it for all the months for each id. But need to then add January value to February and updated February value.
January February March April Sales 1050 800 750 1100 Units Sold 50 40 41 60
I want to change the background color to yellow if the value is less than the previous month. For example for the sales row, February sales is less than January and March sales is less than February so I would want the values (800 and 750) to have a background color of yellow. The columns is grouped by month.I've tried experimenting with the Previous function but I run into the following error message: The BackgroundColor expression for the text box has a scope parameter that is not valid for an aggregate function. The scope parameter must be set to a string constant that is equal to either the name of a containing group, the name of a containing data region, or the name of a dataset.
Currently I report our monthly fees broken down into 4 weeks per month by using 4 separate datasets with the following code
SELECT SUM(Practice.ibvSalesByJob.JobBilledExVAT) AS Sum_JobBilledExVAT FROM Practice.ibvSalesByJob INNER JOIN Practice.idvJobType
[Code] ....
The second dataset then has the date code changed to
AND Practice.ibvSalesByJob.[Date] >= Cast(@Month AS char(2)) + '/08/' + Cast(@DateYear AS char(4)) + ' 00:00:01' AND Practice.ibvSalesByJob.[Date] <= Cast(@Month AS char(2)) + '/16/' + Cast(@DateYear AS char(4)) + ' 00:00:00'
The third
AND Practice.ibvSalesByJob.[Date] >= Cast(@Month AS char(2)) + '/16/' + Cast(@DateYear AS char(4)) + ' 00:00:01' AND Practice.ibvSalesByJob.[Date] <= Cast(@Month AS char(2)) + '/23/' + Cast(@DateYear AS char(4)) + ' 00:00:00'
The fourth
AND Practice.ibvSalesByJob.[Date] >= Cast(@Month AS char(2)) + '/23/' + Cast(@DateYear AS char(4)) + ' 00:00:01'
Now I was hoping so that I could report the above data in one chart and do an expression on the category and group the dates so I would just have one dataset like below but four separate columns saying Week 1, 2 3 and 4 and then the sum filtered in line.
SELECT SUM(Practice.ibvSalesByJob.JobBilledExVAT) AS Sum_JobBilledExVAT FROM Practice.ibvSalesByJob INNER JOIN Practice.idvJobType
[Code] ....
If I could somehow with SQL tie in all 4 separate datasets and display them as Week 1, 2, 3 and 4 underneath the dataset and selectable.An even simpler solution maybe just understanding how charts work, I can get it so I display the 4 separate weeks in the chart however I can't get the bottom line (Category Group) to display Week 1, 2, 3 and 4.
I have the below CTE that I just can't seem to get to give me the right results. Basically what im trying to do is use the first query to show the "sources" that are involved in each inquiry and the second query to show which of those have became "admissions" the thing is the counts of the sources when the CTESource query is ran alone is different than my query to join the two tables.
Code: With CTESource(Total, ID, Source, Program) AS ( SELECT count(Inquiry.ID) as Total, Referral.InquiryID_fk, Source, Inquirer.Program from Referral Inner Join Inquiry on Inquiry.ID = Referral.InquiryID_fk Inner Join Inquirer on Inquirer.ID = Inquiry.InquirerID_fk
[code]....
The total inquiries can be higher than the source totals since a source isnt required in the system as well as there does not have to be admissions regardless of inquiry count.
Is it possible to set up at dataflow with for example an excel source that points to a sheet with varying number of colums.
In the file there is some information about number of columns. But the question is here how you use that information to define the columns in the dataflow ?
I am writing a query to return some production data. Basically i need to insert either 1 or 2 rows into a Table variable based on a decision as to does the production part make 1 or 2 items ( The Raw data does not allow for this it comes from a look up in my database)
I can retrieve all the source data i need easily but when i come to insert it into the table variable i need to insert 1 record if its a single part or 2 records if its a twin part. I know could use a cursor but im sure there has to be an easier way !
Below is the code i have at the moment
declare @startdate as datetime declare @enddate as datetime declare @Line as Integer DECLARE @count INT
set @startdate = '2015-01-01' set @enddate = '2015-01-31'
I implemented Pull snapshot replication about 3 weeks ago on a live server. Everything has been working very well and I really have no complaints. However, I am currently working towards optimization, which brings me to my question.
I have noticed that the snapshot agent will vary in the duration of time it takes to generate the snapshot.
Here is the job history:
9/25 - 3.48min
9/24 - 17min
9/23 - 17min
9/22 - 3.3min
9/21 - 17min
9/20 - 17min
9/19 - 3.39min
The distribution agent currently retains history for 12 hours and the snapshot agent runs once every 24 hours so I don't think this variation in performance could be related to a cache issue.
There are no sql jobs that are scheduled during this timeframe and both severs, Publication and Subscription, are decent boxes with very little load during the replication window.(currently 1am - 2am)
Any ideas why this variation in snapshot generation exists?
We are trying to work out a memory problem associated with a SQLCLR procedure we have developed.
This procedure will run properly on a SQLExpress box, but fails with an Insufficient Memory error (701) when run on our 32-bit enterprise edition server on W2K3 Enterprise Server. The server has 3.25 GB of RAM, and does *not* have the /3GB switch enabled; AWE is *not* enabled on SQL Server.
I initially suspected the problem was due to the idiosyncracies of how the BPool is allocated on SqlExpress and its 1GB buffer pool limitation, giving a 1GB MemToLeave region for SQLCLR allocations -- substantially larger than the default available on the server with it's default 256MB allocation (+128MB for thread stacks). That seemed to explain why a memory problem might not manifest itself on the client, but would on the server. I then altered the server to include an explicit "-g" parameter at startup, reserving 512MB for MemToLeave, but the query still fails with the same memory errors. I've tried values as high as 1GB (-g1024), but none have worked Our DBA has installed a recent hotfix associated with certain memory errors, to no avail.
It appears that the server will max out the CLR allocations at 102MB, regardless of the presence of the -g parameter. Could it be that the MemToLeave region really is that severely fragmented? There are still log messages indicating failures to reserve virtual memory...
One thing I notice is that the buffer's VM Reserved value never seems to change regardless of the value of the "-g" option. I would expect to see it decrease by the amount specified as reserved, eg -g 768 should leave, for example, something like 1.2GB VM Reserved for buffer pool allocation, but it doesn't. That tells me I'm not really establishing a larger MemToLeave area. Is this expectation incorrect?
Bottom line, we don't know why this procedure is running on the server, but not in SqlExpress. It is a procedure that connects to a remote Oracle database and collects about 14,000 records, but dies after sending about 7,000 or so records when run on the server. Again, the same query running against the same code on a SqlExpress box works perfectly.
Any thoughts or suggestions welcomed and greatly appreciated.
I need to find the percentile using cube so i am using the below formula :
((n-1) * p /100) -1
n= count of number of array records p= percentile
I am using below MDX query:
WITH MEMBER [Measures].[PV] AS 25 Member [Measures].[CntCT] as Count(NonEmpty([Tb City].[City Name].&[DC], [Measures].[CPT1])) Member [Measures].[PVInt25] as Int(((([Measures].[CntCT] - 1)* [Measures].[PV])/100) - 1) Member [Measures].[PVC] as ([Measures].[CPT1],Order(NonEmpty([Tb City].[City Name].&[DC],[Measures].[CPT1]), [Measures].[CPT1],ASC).Item([Measures].[PVInt25]))
Select [Measures].[PVC] on columns, {[Tb City].[City Name]} on rows from test;
The line 2: Member [Measures].[CntCT]
In that i need to find the n count of rows where city is DC (City is my Dimension) in Measures CPT1
But currently it is giving the result 1 instead in actual in my test cube there is the city DC exists with 23 CPT1 rows count.
I tried the below query:
SELECT NON EMPTY {[Tb City 1].[City Name].[City Name].&[DC] } ON COLUMNS, NON EMPTY { ( [Measures].[Tb Main Count] ) } ON ROWS FROM [test]
Above query gives me the correct count i.e. 23 but i need to get the result of above query in line 2 of MDX query:
I am trying to calculate the maximum sales per store where multiple stores exist in the same region (i.e there must be doubles of that row) in order to determine the most profitable store per that region.
E.g. Store Sales A 500 B 200 B 100 C 400 C 800 D 100 D 200 D 700
I am using CROSS APPLY instead of UNPIVOT to unpivot > one column. I am wondering if I can dynamically replace column names based on different tables? The example code that I have working is based on the "Allergy" table. I have thirty more specialty tables to go. I'll show the working code first, then an example of another table's columns to show differences:
select [uplift specialty], [member po],[practice unit name], [final nomination status] ,[final uplift status], [final rank], [final uplift percentage] ,practiceID=row_number() over (partition by [practice unit name] order by Metricname) ,metricname,Metricvalue, metricpercentilerank
[code]....
Rheumatology Table:The columns that vary start with "GDR" and [GDR Percentile Rank] so I'm just showing those:
Are both reporting and analysis services of SQL Server are same or different. I mean if I install reporting services so analysis services is a part of it or do I need to install it separately?
I am asking because when I tried to install Visual Studio Team Foundation Server 2005 it said that I do not have SQL Server 9 Analysis Services installed which is a prerequisite but I do remember that I have installed SQL Server reporting services on the system. So it means Analysis Services has to be installed separately from a different CD?
We're looking at several tools to do reporting and analysis of our SQL 2005 data.
We want to create canned web based reports We want internal - non-developers to create canned reports for our customers We want internal - non-developers to create ad hoc reports We want to slice and dice the data in various way and produce graphs and trend reports - pretty stuff for management
Tools like Business Objects Edge satisfy many of these requirements but we already have SQL 2005 which I understand can do similar things. I can easily get a demo of a companys products to show me what can and can't be done.
Does anyone know how I can get a SQL demo using these services ? I tried contacting Microsoft but didn't get anywhere
I don't have the luxury of time to learn all the benefits and functionality to understand if SQL is the best way to go. Database wise - yes - but Analysis and Reporting ??
1)Where do I do the dateDiff calculation, at report or cube level? 2)How do I work out which dates belong to the above groups? I'm assuming i have to check if the dateDiff lies between those numbers?
I have a requirement to mirror our production database (or part/derivative of it). It is imperative that the mirrored database maintains a live copy of the production data. The data is financial data, so analysis of it requires latest prices, exchange rates etc.
One product I have looked at, and am very impressed with so far is DataMirror (www.datamirror.com). I have no idea of its price yet, as I'm waiting for a rep to contact me. In the meantime, does anyone have experience in this field with alternative products? Is there a free product that I should be looking at?
I've got a software development PC that was running SQL 2000 + Analysis Services + Reporting Service (sp4 from memory). I then installed SQL Express 2005 and later then SQL 2005 Standard (dev) + Analysis + Reporting and upgraded to Sp2 last month.
To help improve the performance of this poor little PC, I've gone to Control Panel and uninstalled SQL 2000 service. I've also used the SQL 2005 Surface area configuration tool to switch off the SQL Express instance from running. Practically, I probably should remove the $SQLExpress instance.
The problem I'm faced with is the SQL 2000 Analysis and SQL 2000 Reporting service is still registered as Windows Services and showing the the SQL Server Configuration Manager (2005), but there is no uninstall option in the control pannel. So I can't work out how to uninstall these software and services.
It is also apparent that there are a series of "files" in the C:Program FilesMicrosoft SQL Server80* directory like ..ToolsDevToolssamples*.* directory and others that shouldn't really be there if I've uninstalled SQL 2000 via the control panel.
Is there a SQL 2000 cleanup or removal tool that will help remove these old services and files?
Does anyone have some suggestions on how to cleanup my development PC without the full operating system installation?
Hi, I'm trying to learn about analysis, integration and reporting services. I have install SQL server 2005 management Studio Express. but I cant find these in the Start menu as mentioned in the tutorial Click Start > SQL Server 2005 > Business Intelligence Development Studio.(for reporting services). what do I need to do? Please help me.
I've created a cube and it processed fine. The calculate command is there. The measure that I'm attempting to run in the SSAS/Visual Studios browser is simply a count rows measure. When I drag the measure to the window, it says no rows available. If I click on the filter that allows nulls, the only change it makes is that it goes from no rows available to "NULL".
Is anyone using an abstraction layer for the middle tier to interface with so the actual table design is hidden for the application? I have read several articles that it can be done using views http://www.sqlservercentral.com/articles/Database Design/61335/. However, I don't see myself creating a view ontop of every table and allowing dml modifications to happen through them. I think it would make the query optimizier throw up after a certain level of data and views are encountered. I know snonyms are available in 2005, but I have only seen what can be done not what should be done.
I don't have a fear of allowing my .NET developers (I work with very competent people) to create middle tier objects directly against the db tables for oltp dml operations. I don't want to create stored procedures for these because I think more flexibility exists within the middle tier for business logic. Then all select operations are performed against the db with stored procedures. Does anyone out there think I am crazy? Has anyone successfully created an abstraction layer strategy for their entire db?
I have the following stored procedure: INSERT INTO MyTable ( Value1, Value 2) VALUES( @Value1, @Value2) SELECT SCOPE_IDENTITY() How do I put this sp in the DAL typed dataset, so I can get the Identity value in the Business Layer?
Instead of showing the same content (images) when customers visit our application, we want to show random images to make use of all the images that can be displayed.
My question is, is it better to handle randomness at SQL or in the application layer. In sql, we can achieve this by doing order by newid(). My understanding of this is, SQL will create a guid (which is random) for all the rows in the resultset and will sort by the guid. If this code is encapsulated in a SP and if it may be executed over say 200+ or say 1000+ times a day, isn't it better to handle the randomness in the app layer. Let the app layer use resources and sql just retrieve the data necessary.
I'm searching for good documentation for building Application layer for Report (SSRS) using Visual Studio 2005. Kindly forward useful link if possible or walk me through.
I've been following Soctt Mitchell's tutorials on Data Access and in Tutorial 1 (Step 5) he suggests using SQL Subqueries in TableAdapters in order to pick up extra information for display using a datasource. I have two tables for a gallery system I'm building. One called Photographs and one called MS_Photographs which has extra information about certain images. When reading the MS_Photograph data I also want to include a couple of fields from the related Photographs table. Rather than creating a table adapter just to pull this data I wanted to use the existing MS_Photographs adapter with a query such as...1 SELECT CAR_MAKE, CAR_MODEL, 2 (SELECT DATE_TAKEN 3 FROM PHOTOGRAPHS 4 WHERE (PHOTOGRAPH_ID = MS_PHOTOGRAPHS.PHOTOGRAPH_ID)) AS DATE_TAKEN, 5 (SELECT FORMAT 6 FROM PHOTOGRAPHS 7 WHERE (PHOTOGRAPH_ID = MS_PHOTOGRAPHS.PHOTOGRAPH_ID)) AS FORMAT, 8 (SELECT REFERENCE 9 FROM PHOTOGRAPHS 10 WHERE (PHOTOGRAPH_ID = MS_PHOTOGRAPHS.PHOTOGRAPH_ID)) AS REFERENCE, 11 DRIVER1, TEAM, GALLERY_ID, PHOTOGRAPH_ID 12 FROM MS_PHOTOGRAPHS 13 WHERE (GALLERY_ID = @GalleryID) This works but I wanted to know if there's a way to get all of the fields using one subquery instead of three? I did try it but it gave me errors for everything I could think of.Is using a subquery like above the best way when you want this many fields from a secondary table or should I be using another approach. I'm using classes for the BLL as well and wondered if there's a way to do it at this stage instead?