作爲客戶的MVC 3(EF4)項目的一部分,我最初編寫幾個報表之後,我決定在Microsoft報表服務中構建報表要容易得多(SQL Server上的SSRS 2008 2008)。對於我的大多數報告來說,這已被證明是一件輕而易舉的事情,甚至不必爲我的大多數報告編寫SQL過程(基於模型的BIDS中的語義查詢)。SSRS 2008中複雜的迭代查詢
但是,由於其輸入參數的性質,最初是在返回列表的函數中計算的,而不是LINQ查詢,所以一個報告仍然令人生畏。目標是在日期a和日期b(由報告請求者輸入的變量)之間的範圍內的任何一天返回人表中小於百分之x的所有人員。此繁忙等級信息僅存在於作業表中,其中包含關於分配給哪個人的信息,作業的開始和結束日期及其任務級別。其結果是,我原來的C#的功能確實非常以下(僞代碼):
given startDateRange a, stopDateRange b, busyLevel x
{
for each person in people:
List returnPeople = new List()
create array consisting of days from a to b
for each job in jobs:
for each intersecting date of DateRange and job dateRange:
add task level of job to array
for each day in array:
if array[day] < x
returnPeople.Add(person)
break;
return returnPeople
}
表結構相關的部分:
People Table:
-PersonID (PK)
-other stuff...
Jobs Table:
-JobID (PK)
-StartDate
-StopDate
-Allocation
-AssignedPersonID (FK to People Table)
正如你所看到的,工作是對某人的計劃如果那個工作的AssignedPersonID是=有人
所以...因爲我現在在SSRS 2008工作,我正在尋找關於如何在相同的輸入參數中獲得SSRS中的相同結果的指導。一些技巧,我目前不知道的語義查詢? SQL存儲PROC與臨時表或表變量?某種數據處理擴展?任何有關此類問題的最佳方法的信息都將不勝感激。
讓我知道是否需要額外的信息/代碼。
編輯:目前正在使用遊標和臨時表的解決方案,幾乎複製我的原始功能的結構。由於遊標的複雜性和低效性,這肯定不是理想的,所以建議/替代方案會有所幫助。
編輯:找到了一個解決方案,絕對不是最有效的。如果某人有更快的方法,將會改變接受的答案。
如果你發佈一個合理的輸入表格樣本和預期的輸出結果,你可以得到更多的幫助。 –
添加了一些表結構的信息,讓我知道如果你需要更多。 – glockman
是否可以將多個工作同時分配給一個人?在那種情況下,你的邏輯是把那個人的分配結果總計爲當天的總「忙碌%」?此外,看起來喬布斯表格假設他們在工作日期範圍內每天都會有相同的百分比,對嗎? – zpert