Solved

Partition the fact tables based on 2 columns

Posted on 2011-09-14
4
530 Views
Last Modified: 2016-02-15
I have a fact table with many fields among which two important columns are Article Id and NewsDate. Article Id's are not in a specific order. They are random. So for partitioning can I use both Article Id and News Date for filtering.

select ArticleID,NewsDate from vwFactTableArticle
where ArticleID>5100000 and NewsDate>'2011-01-01'
0
Comment
Question by:himabindu_nvn
  • 3
4 Comments
 
LVL 59

Expert Comment

by:Kevin Cross
ID: 36538927
himabindu_nvn,

I believe the answer for SQL 2005 and 2008 is you cannot. You must partition on one column.

Even if you could, just as a clarification, why would you want to? If the ArticleID is random within a given NewsDate range, are you sure you want to create a PARTITION by ArticleID | NewsDate combination? That would result in for each NewsDate range, a partition for each ArticleID range within it. Is that what you want? i.e., sub-partitioning?

I would think you would want to partition by NewsDate and using date range filter to the correct partition to find data which includes random ArticleIDs.

Anyway, it cannot be done, or at least I have not found any documentation stating it has been added to newer versions of SQL, including Denali. Therefore, I will have to stick with you cannot until someone educates me otherwise. Sorry.

Kevin
0
 

Author Comment

by:himabindu_nvn
ID: 36538941
Thanks for the response. I have already partitioned another fact table based on NewsDate. Can I use NewsDate again to partition another fact table?
0
 
LVL 59

Expert Comment

by:Kevin Cross
ID: 36539020
Now, what you could do is create a composite key that represents your date + article id, just ensure to put it together in a fashion that scales with your data. For example if your ArticleID is BIGINT, it can have 19 total digits; therefor you could in theory do something like this in a computed column:

DECLARE @ArticleID BIGINT, @NewsDate DATETIME;
SET @NewsDate = '2011-01-01'
SET @ArticleID = 5100000 

SELECT CONVERT(NUMERIC(38,0), 
               CONVERT(BIGINT, 
                       @NewsDate
               ) * POWER(10.0,19) + @ArticleID
       ) AS Option1
     , CONVERT(NUMERIC(38,0), 
	           CONVERT(BIGINT, 
			           CONVERT(CHAR(8), 
                               @NewsDate, 
                               112
                       )
               ) * POWER(10.0,19) + @ArticleID
       ) AS Option2
;

Open in new window


Option1 ==> 405420000000000005100000
Option2 ==> 201101010000000000005100000

Whichever you choose, you can use the resulting value as your partitioning column.
You will have to remember to build your searches based on this longer column, though, so that is the trade off.
0
 
LVL 59

Accepted Solution

by:
Kevin Cross earned 500 total points
ID: 36539041
You are applying partition scheme to a particular table, so I would not see why not. But maybe I am just not experienced enough with SSAS and partitioning.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Nowadays, some of developer are too much worried about data. Who is using data, who is updating it etc. etc. Because, data is more costlier in term of money and information. So security of data is focusing concern in days. Lets' understand the Au…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question