Files
linqpad/Kevin's Python queries reversed engineered.linq
T

105 lines
6.2 KiB
C#

<Query Kind="Statements">
<Connection>
<ID>40766b24-ff74-431b-b387-6c221ede77cf</ID>
<Persist>true</Persist>
<Server>p3121-sql-02.sdt.local</Server>
<Database>jazz prd UNC 20180206.1</Database>
<ShowServer>true</ShowServer>
</Connection>
<Reference>&lt;ProgramFilesX64&gt;\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\Newtonsoft.Json.dll</Reference>
<NuGetReference>Amazon.Lambda.S3Events</NuGetReference>
<NuGetReference>AWSSDK.Core</NuGetReference>
<NuGetReference>AWSSDK.S3</NuGetReference>
<Namespace>Amazon</Namespace>
<Namespace>Amazon.Auth.AccessControlPolicy</Namespace>
<Namespace>Amazon.Auth.AccessControlPolicy.ActionIdentifiers</Namespace>
<Namespace>Amazon.Internal</Namespace>
<Namespace>Amazon.Lambda.S3Events</Namespace>
<Namespace>Amazon.MissingTypes</Namespace>
<Namespace>Amazon.Runtime</Namespace>
<Namespace>Amazon.Runtime.CredentialManagement</Namespace>
<Namespace>Amazon.Runtime.CredentialManagement.Internal</Namespace>
<Namespace>Amazon.Runtime.EventStreams</Namespace>
<Namespace>Amazon.Runtime.EventStreams.Internal</Namespace>
<Namespace>Amazon.Runtime.Internal</Namespace>
<Namespace>Amazon.Runtime.Internal.Auth</Namespace>
<Namespace>Amazon.Runtime.Internal.Settings</Namespace>
<Namespace>Amazon.Runtime.Internal.Transform</Namespace>
<Namespace>Amazon.Runtime.Internal.Util</Namespace>
<Namespace>Amazon.Runtime.SharedInterfaces</Namespace>
<Namespace>Amazon.Runtime.SharedInterfaces.Internal</Namespace>
<Namespace>Amazon.S3</Namespace>
<Namespace>Amazon.S3.Encryption</Namespace>
<Namespace>Amazon.S3.Encryption.Internal</Namespace>
<Namespace>Amazon.S3.Internal</Namespace>
<Namespace>Amazon.S3.IO</Namespace>
<Namespace>Amazon.S3.Model</Namespace>
<Namespace>Amazon.S3.Model.Internal.MarshallTransformations</Namespace>
<Namespace>Amazon.S3.Transfer</Namespace>
<Namespace>Amazon.S3.Util</Namespace>
<Namespace>Amazon.Util</Namespace>
<Namespace>Amazon.Util.Internal</Namespace>
<Namespace>Amazon.Util.Internal.PlatformServices</Namespace>
<Namespace>Newtonsoft.Json</Namespace>
<Namespace>Newtonsoft.Json.Converters</Namespace>
<Namespace>Newtonsoft.Json.Linq</Namespace>
<Namespace>Newtonsoft.Json.Schema</Namespace>
<Namespace>Newtonsoft.Json.Serialization</Namespace>
<Namespace>System</Namespace>
<Namespace>System.Diagnostics</Namespace>
<Namespace>System.Diagnostics.Tracing</Namespace>
<Namespace>System.IO.Compression</Namespace>
<Namespace>ThirdParty.BouncyCastle.Asn1</Namespace>
<Namespace>ThirdParty.BouncyCastle.Asn1.Utilities</Namespace>
<Namespace>ThirdParty.BouncyCastle.Math</Namespace>
<Namespace>ThirdParty.BouncyCastle.OpenSsl</Namespace>
<Namespace>ThirdParty.BouncyCastle.Utilities.IO.Pem</Namespace>
<Namespace>ThirdParty.Ionic.Zlib</Namespace>
<Namespace>ThirdParty.Json.LitJson</Namespace>
<Namespace>ThirdParty.MD5</Namespace>
</Query>
var timeClasses = new[] { 1, 4 };
var departments = new[] { 115355, 115372, 115373, 45950, 45953, 45955, 45959, 45960, 45967, 45968, 45973, 45974, 45975, 45976, 45977, 45979, 45980, 45982, 45985, 45998, 46030, 59278, 74820 };
var payperiods = new[] { 3136, 3135, 3134, 3133, 3132, 3131 };
var hours = from fact in FactPayrollSampledPayPeriods
join payperiod in DimPayPeriods on fact.PayPeriodID equals payperiod.PayPeriodID
join paycode in DimPayCodeGroups on fact.PayCodeGroupID equals paycode.PayCodeGroupID
join prodclass in DimProductiveClasses on paycode.ProductiveClassID equals prodclass.ProductiveClassID
join department in DimDepartments on fact.DepartmentID equals department.DepartmentID
where prodclass.Name == "Productive"
&& timeClasses.Contains(fact.TimeClassID)
&& departments.Contains(fact.DepartmentID)
&& payperiods.Contains(fact.PayPeriodID)
group new { fact, department, payperiod } by new { department.DepartmentID, payperiod.PayPeriodID, fact.TimeClassID } into g
select new { g.Key.DepartmentID, g.Key.PayPeriodID, g.Key.TimeClassID, Units = g.Sum(f => f.fact.Hours), UnitType = "hours" };
var dollars = from fact in FactPayrollSampledPayPeriods
join payperiod in DimPayPeriods on fact.PayPeriodID equals payperiod.PayPeriodID
join paycode in DimPayCodeGroups on fact.PayCodeGroupID equals paycode.PayCodeGroupID
join department in DimDepartments on fact.DepartmentID equals department.DepartmentID
where timeClasses.Contains(fact.TimeClassID)
&& departments.Contains(fact.DepartmentID)
&& payperiods.Contains(fact.PayPeriodID)
group new { fact, department, payperiod } by new { department.DepartmentID, payperiod.PayPeriodID, fact.TimeClassID } into g
select new { g.Key.DepartmentID, g.Key.PayPeriodID, g.Key.TimeClassID, Units = g.Sum(f => f.fact.Dollars), UnitType = "dollars" };
var uos = from fact in ViewPrimaryStatisticsStaffingByPayPeriod
join payperiod in DimPayPeriods on fact.PayPeriodID equals payperiod.PayPeriodID
join department in DimDepartments on fact.DepartmentID equals department.DepartmentID
where timeClasses.Contains(fact.TimeClassID)
&& departments.Contains(fact.DepartmentID)
&& payperiods.Contains(fact.PayPeriodID)
group new { fact, department, payperiod } by new { department.DepartmentID, payperiod.PayPeriodID, fact.TimeClassID } into g
select new { g.Key.DepartmentID, g.Key.PayPeriodID, g.Key.TimeClassID, Units = g.Sum(f => f.fact.Units) ?? 0.0m, UnitType = "uos" };
hours.Concat(dollars).Concat(uos)
//.Where(x => departments.Contains(x.DepartmentID) && payperiods.Contains(x.PayPeriodID))
.Join(DimDepartments, m => m.DepartmentID, d => d.DepartmentID, (m, d) => new { m.DepartmentID, m.PayPeriodID, m.TimeClassID, m.Units, m.UnitType, Department = d.Name })
.Join(DimPayPeriods, m => m.PayPeriodID, p => p.PayPeriodID, (m, p) => new { m.DepartmentID, m.PayPeriodID, m.TimeClassID, m.Units, m.UnitType, m.Department, p.PeriodStartCalendarDate, p.PeriodEndCalendarDate })
.Join(DimTimeClasses, m => m.TimeClassID, t => t.TimeClassID, (m, t) => new { m.DepartmentID, m.PayPeriodID, m.TimeClassID, m.Units, m.UnitType, m.Department, m.PeriodStartCalendarDate, m.PeriodEndCalendarDate, t.TimeClassCode, TimeClass = t.Name, t.SortOrder })
.OrderBy(x => x.DepartmentID)
.ThenBy(x => x.PayPeriodID)
.ThenBy(x => x.UnitType)
.ThenBy(x => x.SortOrder)
.Dump();