diff --git a/SetUpAggs/AW Internet Sales/AdventureWorksAggs.smproj b/SetUpAggs/AW Internet Sales/AdventureWorksAggs.smproj new file mode 100644 index 0000000..963435a --- /dev/null +++ b/SetUpAggs/AW Internet Sales/AdventureWorksAggs.smproj @@ -0,0 +1,45 @@ + + + Development + 2.0 + {8CE414BB-95B2-4C99-9E03-51BA72086E22} + Exe + MyRootNamespace + MyAssemblyName + false + bin\ + AdventureWorksAggs + + + bin\ + asazure://southcentralus.asazure.windows.net/chwade003 + Developer + Unknown + AdventureWorksAg + Model + Default + False + InMemory + Default + Default + + + asazure://aspaastest14.asazure-int.windows.net/sukanyasaltsrc1 + Developer + Unknown + AdventureWorksAggs + Model + Default + False + InMemory + Default + Default + + + + + Code + + + + \ No newline at end of file diff --git a/SetUpAggs/AW Internet Sales/Model.bim b/SetUpAggs/AW Internet Sales/Model.bim new file mode 100644 index 0000000..7eb3e65 --- /dev/null +++ b/SetUpAggs/AW Internet Sales/Model.bim @@ -0,0 +1,1626 @@ +{ + "name": "SemanticModel", + "compatibilityLevel": 1400, + "model": { + "defaultMode": "directQuery", + "culture": "en-US", + "dataSources": [ + { + "type": "structured", + "name": "SQL/localhost\\SP1;AdventureWorksDW", + "connectionDetails": { + "protocol": "tds", + "address": { + "server": "chwadeaggs.database.windows.net", + "database": "chwadeAW" + }, + "authentication": null, + "query": null + }, + "credential": { + "AuthenticationKind": "UsernamePassword", + "kind": "SQL", + "path": "chwadeaggs.database.windows.net;chwadeAW", + "Username": "Jim", + "EncryptConnection": true + } + } + ], + "tables": [ + { + "name": "FactInternetSales", + "columns": [ + { + "name": "ProductKey", + "dataType": "int64", + "sourceColumn": "ProductKey" + }, + { + "name": "OrderDateKey", + "dataType": "int64", + "sourceColumn": "OrderDateKey" + }, + { + "name": "DueDateKey", + "dataType": "int64", + "sourceColumn": "DueDateKey" + }, + { + "name": "ShipDateKey", + "dataType": "int64", + "sourceColumn": "ShipDateKey" + }, + { + "name": "CustomerKey", + "dataType": "int64", + "sourceColumn": "CustomerKey" + }, + { + "name": "PromotionKey", + "dataType": "int64", + "sourceColumn": "PromotionKey" + }, + { + "name": "CurrencyKey", + "dataType": "int64", + "sourceColumn": "CurrencyKey" + }, + { + "name": "SalesTerritoryKey", + "dataType": "int64", + "sourceColumn": "SalesTerritoryKey" + }, + { + "name": "SalesOrderNumber", + "dataType": "string", + "sourceColumn": "SalesOrderNumber" + }, + { + "name": "SalesOrderLineNumber", + "dataType": "int64", + "sourceColumn": "SalesOrderLineNumber" + }, + { + "name": "RevisionNumber", + "dataType": "int64", + "sourceColumn": "RevisionNumber" + }, + { + "name": "OrderQuantity", + "dataType": "int64", + "sourceColumn": "OrderQuantity" + }, + { + "name": "UnitPrice", + "dataType": "decimal", + "sourceColumn": "UnitPrice" + }, + { + "name": "ExtendedAmount", + "dataType": "decimal", + "sourceColumn": "ExtendedAmount" + }, + { + "name": "UnitPriceDiscountPct", + "dataType": "double", + "sourceColumn": "UnitPriceDiscountPct" + }, + { + "name": "DiscountAmount", + "dataType": "double", + "sourceColumn": "DiscountAmount" + }, + { + "name": "ProductStandardCost", + "dataType": "decimal", + "sourceColumn": "ProductStandardCost" + }, + { + "name": "TotalProductCost", + "dataType": "decimal", + "sourceColumn": "TotalProductCost" + }, + { + "name": "SalesAmount", + "dataType": "decimal", + "sourceColumn": "SalesAmount" + }, + { + "name": "TaxAmt", + "dataType": "decimal", + "sourceColumn": "TaxAmt" + }, + { + "name": "Freight", + "dataType": "decimal", + "sourceColumn": "Freight" + }, + { + "name": "CarrierTrackingNumber", + "dataType": "string", + "sourceColumn": "CarrierTrackingNumber" + }, + { + "name": "CustomerPONumber", + "dataType": "string", + "sourceColumn": "CustomerPONumber" + }, + { + "name": "OrderDate", + "dataType": "dateTime", + "sourceColumn": "OrderDate", + "variations": [ + { + "name": "Calendar Reuse", + "description": "Show Calendar hierarchy as field in Internet Sales", + "relationship": "ae49b4e7-772e-4fde-a7e4-3f5f80915766", + "defaultHierarchy": { + "table": "DimDate", + "hierarchy": "Calendar" + }, + "isDefault": true + } + ] + }, + { + "name": "DueDate", + "dataType": "dateTime", + "sourceColumn": "DueDate" + }, + { + "name": "ShipDate", + "dataType": "dateTime", + "sourceColumn": "ShipDate" + }, + { + "type": "calculated", + "name": "Margin", + "dataType": "decimal", + "isDataTypeInferred": true, + "expression": "[SalesAmount]-[TotalProductCost]", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "LastUpdateDate", + "dataType": "dateTime", + "sourceColumn": "LastUpdateDate" + } + ], + "partitions": [ + { + "name": "FactInternetSales", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data]", + "in", + " dbo_FactInternetSales" + ] + }, + "annotations": [ + { + "name": "QueryEditorSerialization", + "value": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data]", + "in", + " dbo_FactInternetSalesText]]>" + ] + } + ] + } + ], + "measures": [ + { + "name": "InternetDistinctCountSalesOrder", + "expression": "DISTINCTCOUNT([SalesOrderNumber])", + "formatString": "#,0" + }, + { + "name": "InternetOrderLinesCount", + "expression": "COUNTA([SalesOrderLineNumber])", + "formatString": "#,0" + }, + { + "name": "InternetTotalUnits", + "expression": "SUM([OrderQuantity])", + "formatString": "#,0" + }, + { + "name": "InternetTotalDiscountAmount", + "expression": "SUM([DiscountAmount])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetTotalProductCost", + "expression": "SUM([TotalProductCost])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetTotalSales", + "expression": "SUM([SalesAmount])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetTotalTaxAmt", + "expression": "SUM([TaxAmt])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetTotalFreight", + "expression": "SUM([Freight])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetTotalMargin", + "expression": "SUM([Margin])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetCurrentQuarterSalesPerformance", + "expression": "IFERROR([InternetCurrentQuarterSales]/[InternetPreviousQuarterSalesProportionToQTD],BLANK())", + "kpi": { + "targetExpression": "1.1", + "statusGraphic": "Shapes", + "statusExpression": [ + "var x='FactInternetSales'[InternetCurrentQuarterSalesPerformance] return", + " if(ISBLANK(x),BLANK(),", + " If(x<1,-1,", + "\t If(x<1.07,0,1)", + " )", + " )", + " " + ], + "annotations": [ + { + "name": "GoalType", + "value": "StaticValue" + }, + { + "name": "KpiStatusType", + "value": "Linear" + }, + { + "name": "KpiThresholdType", + "value": "Absolute" + }, + { + "name": "KpiThresholdOrdering", + "value": "Ascending" + }, + { + "name": "KpiThresholdCount", + "value": "2" + }, + { + "name": "KpiThreshold_0", + "value": "1" + }, + { + "name": "KpiThreshold_1", + "value": "1.07" + } + ] + }, + "detailRowsDefinition": {} + }, + { + "name": "InternetPreviousQuarterMargin", + "expression": "CALCULATE([InternetTotalMargin],PREVIOUSQUARTER('DimDate'[Date]))", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetCurrentQuarterMargin", + "expression": "TOTALQTD([InternetTotalMargin],'DimDate'[Date])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetPreviousQuarterMarginProportionToQTD", + "expression": "[InternetPreviousQuarterMargin]*([DaysCurrentQuarterToDate]/[DaysInCurrentQuarter])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetPreviousQuarterSales", + "expression": "CALCULATE([InternetTotalSales],PREVIOUSQUARTER('DimDate'[Date]))", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetCurrentQuarterSales", + "expression": "TOTALQTD([InternetTotalSales],'DimDate'[Date])", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "InternetPreviousQuarterSalesProportionToQTD", + "expression": "[InternetPreviousQuarterSales]*([DaysCurrentQuarterToDate]/[DaysInCurrentQuarter])", + "formatString": "0.00%;-0.00%;0.00%" + }, + { + "name": "InternetCurrentQuarterMarginPerformance", + "expression": "IF([InternetPreviousQuarterMarginProportionToQTD]<>0,([InternetCurrentQuarterMargin]-[InternetPreviousQuarterMarginProportionToQTD])/[InternetPreviousQuarterMarginProportionToQTD],BLANK())", + "kpi": { + "targetExpression": "1.25", + "statusGraphic": "Shapes", + "statusExpression": [ + "var x='FactInternetSales'[InternetCurrentQuarterMarginPerformance] return", + " if(ISBLANK(x),BLANK(),", + " If(x<0.8,-1,", + "\t If(x<1.03,0,1)", + " )", + " )", + " " + ], + "annotations": [ + { + "name": "GoalType", + "value": "StaticValue" + }, + { + "name": "KpiStatusType", + "value": "Linear" + }, + { + "name": "KpiThresholdType", + "value": "Absolute" + }, + { + "name": "KpiThresholdOrdering", + "value": "Ascending" + }, + { + "name": "KpiThresholdCount", + "value": "2" + }, + { + "name": "KpiThreshold_0", + "value": "0.8" + }, + { + "name": "KpiThreshold_1", + "value": "1.03" + } + ] + }, + "detailRowsDefinition": {} + }, + { + "name": "YTD InternetTotalSales", + "expression": "CALCULATE([InternetTotalSales], DATESYTD(DimDate[Date]))", + "formatString": "\\$#,0;(\\$#,0);\\$#,0", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + } + ] + }, + { + "name": "DimCustomer", + "columns": [ + { + "name": "CustomerKey", + "dataType": "int64", + "sourceColumn": "CustomerKey" + }, + { + "name": "GeographyKey", + "dataType": "int64", + "sourceColumn": "GeographyKey" + }, + { + "name": "CustomerAlternateKey", + "dataType": "string", + "sourceColumn": "CustomerAlternateKey" + }, + { + "name": "Title", + "dataType": "string", + "sourceColumn": "Title" + }, + { + "name": "FirstName", + "dataType": "string", + "sourceColumn": "FirstName" + }, + { + "name": "MiddleName", + "dataType": "string", + "sourceColumn": "MiddleName" + }, + { + "name": "LastName", + "dataType": "string", + "sourceColumn": "LastName" + }, + { + "name": "NameStyle", + "dataType": "boolean", + "sourceColumn": "NameStyle" + }, + { + "name": "BirthDate", + "dataType": "dateTime", + "sourceColumn": "BirthDate" + }, + { + "name": "MaritalStatus", + "dataType": "string", + "sourceColumn": "MaritalStatus" + }, + { + "name": "Suffix", + "dataType": "string", + "sourceColumn": "Suffix" + }, + { + "name": "Gender", + "dataType": "string", + "sourceColumn": "Gender" + }, + { + "name": "EmailAddress", + "dataType": "string", + "sourceColumn": "EmailAddress" + }, + { + "name": "YearlyIncome", + "dataType": "decimal", + "sourceColumn": "YearlyIncome" + }, + { + "name": "TotalChildren", + "dataType": "int64", + "sourceColumn": "TotalChildren" + }, + { + "name": "NumberChildrenAtHome", + "dataType": "int64", + "sourceColumn": "NumberChildrenAtHome" + }, + { + "name": "EnglishEducation", + "dataType": "string", + "sourceColumn": "EnglishEducation" + }, + { + "name": "EnglishOccupation", + "dataType": "string", + "sourceColumn": "EnglishOccupation" + }, + { + "name": "HouseOwnerFlag", + "dataType": "string", + "sourceColumn": "HouseOwnerFlag" + }, + { + "name": "NumberCarsOwned", + "dataType": "int64", + "sourceColumn": "NumberCarsOwned" + }, + { + "name": "AddressLine1", + "dataType": "string", + "sourceColumn": "AddressLine1" + }, + { + "name": "AddressLine2", + "dataType": "string", + "sourceColumn": "AddressLine2" + }, + { + "name": "Phone", + "dataType": "string", + "sourceColumn": "Phone" + }, + { + "name": "DateFirstPurchase", + "dataType": "dateTime", + "sourceColumn": "DateFirstPurchase" + }, + { + "name": "CommuteDistance", + "dataType": "string", + "sourceColumn": "CommuteDistance" + } + ], + "partitions": [ + { + "name": "DimCustomer", + "dataView": "full", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_DimCustomer = Source{[Schema=\"dbo\",Item=\"DimCustomer\"]}[Data],", + " #\"Removed Columns\" = Table.RemoveColumns(dbo_DimCustomer,{\"SpanishEducation\", \"FrenchEducation\", \"SpanishOccupation\", \"FrenchOccupation\"})", + "in", + " #\"Removed Columns\"" + ] + } + } + ] + }, + { + "name": "DimDate", + "showAsVariationsOnly": true, + "dataCategory": "Time", + "columns": [ + { + "name": "DateKey", + "dataType": "int64", + "sourceColumn": "DateKey" + }, + { + "name": "Date", + "dataType": "dateTime", + "isKey": true, + "sourceColumn": "FullDateAlternateKey" + }, + { + "name": "DayNumberOfWeek", + "dataType": "int64", + "sourceColumn": "DayNumberOfWeek" + }, + { + "name": "EnglishDayNameOfWeek", + "dataType": "string", + "sourceColumn": "EnglishDayNameOfWeek" + }, + { + "name": "DayNumberOfMonth", + "dataType": "int64", + "sourceColumn": "DayNumberOfMonth" + }, + { + "name": "DayNumberOfYear", + "dataType": "int64", + "sourceColumn": "DayNumberOfYear" + }, + { + "name": "WeekNumberOfYear", + "dataType": "int64", + "sourceColumn": "WeekNumberOfYear" + }, + { + "name": "EnglishMonthName", + "dataType": "string", + "sourceColumn": "EnglishMonthName", + "sortByColumn": "MonthNumberOfYear" + }, + { + "name": "MonthNumberOfYear", + "dataType": "int64", + "sourceColumn": "MonthNumberOfYear" + }, + { + "name": "CalendarQuarter", + "dataType": "int64", + "sourceColumn": "CalendarQuarter" + }, + { + "name": "CalendarYear", + "dataType": "int64", + "sourceColumn": "CalendarYear" + }, + { + "name": "CalendarSemester", + "dataType": "int64", + "sourceColumn": "CalendarSemester" + }, + { + "name": "FiscalQuarter", + "dataType": "int64", + "sourceColumn": "FiscalQuarter" + }, + { + "name": "FiscalYear", + "dataType": "int64", + "sourceColumn": "FiscalYear" + }, + { + "name": "FiscalSemester", + "dataType": "int64", + "sourceColumn": "FiscalSemester" + } + ], + "partitions": [ + { + "name": "DimDate", + "dataView": "full", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_DimDate = Source{[Schema=\"dbo\",Item=\"DimDate\"]}[Data],", + " #\"Removed Columns\" = Table.RemoveColumns(dbo_DimDate,{\"SpanishDayNameOfWeek\", \"FrenchDayNameOfWeek\", \"SpanishMonthName\", \"FrenchMonthName\"})", + "in", + " #\"Removed Columns\"" + ] + } + } + ], + "measures": [ + { + "name": "DaysCurrentQuarterToDate", + "expression": "COUNTROWS( DATESQTD( 'DimDate'[Date])) " + }, + { + "name": "DaysInCurrentQuarter", + "expression": "COUNTROWS( DATESBETWEEN( 'DimDate'[Date], STARTOFQUARTER( LASTDATE('DimDate'[Date])), ENDOFQUARTER('DimDate'[Date])))" + } + ], + "hierarchies": [ + { + "name": "Calendar", + "levels": [ + { + "name": "Year", + "ordinal": 0, + "column": "CalendarYear" + }, + { + "name": "Month", + "ordinal": 1, + "column": "EnglishMonthName" + }, + { + "name": "Date", + "ordinal": 2, + "column": "Date" + } + ] + }, + { + "name": "Fiscal", + "levels": [ + { + "name": "FiscalYear", + "ordinal": 0, + "column": "FiscalYear" + }, + { + "name": "Month", + "ordinal": 1, + "column": "EnglishMonthName" + }, + { + "name": "Date", + "ordinal": 2, + "column": "Date" + } + ] + } + ] + }, + { + "name": "DimProduct", + "columns": [ + { + "name": "ProductKey", + "dataType": "int64", + "sourceColumn": "ProductKey" + }, + { + "name": "ProductAlternateKey", + "dataType": "string", + "sourceColumn": "ProductAlternateKey" + }, + { + "name": "ProductSubcategoryKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryKey" + }, + { + "name": "WeightUnitMeasureCode", + "dataType": "string", + "sourceColumn": "WeightUnitMeasureCode" + }, + { + "name": "SizeUnitMeasureCode", + "dataType": "string", + "sourceColumn": "SizeUnitMeasureCode" + }, + { + "name": "EnglishProductName", + "dataType": "string", + "sourceColumn": "EnglishProductName" + }, + { + "name": "StandardCost", + "dataType": "decimal", + "sourceColumn": "StandardCost" + }, + { + "name": "FinishedGoodsFlag", + "dataType": "boolean", + "sourceColumn": "FinishedGoodsFlag" + }, + { + "name": "Color", + "dataType": "string", + "sourceColumn": "Color" + }, + { + "name": "SafetyStockLevel", + "dataType": "int64", + "sourceColumn": "SafetyStockLevel" + }, + { + "name": "ReorderPoint", + "dataType": "int64", + "sourceColumn": "ReorderPoint" + }, + { + "name": "ListPrice", + "dataType": "decimal", + "sourceColumn": "ListPrice" + }, + { + "name": "Size", + "dataType": "string", + "sourceColumn": "Size" + }, + { + "name": "SizeRange", + "dataType": "string", + "sourceColumn": "SizeRange" + }, + { + "name": "Weight", + "dataType": "double", + "sourceColumn": "Weight" + }, + { + "name": "DaysToManufacture", + "dataType": "int64", + "sourceColumn": "DaysToManufacture" + }, + { + "name": "ProductLine", + "dataType": "string", + "sourceColumn": "ProductLine" + }, + { + "name": "DealerPrice", + "dataType": "decimal", + "sourceColumn": "DealerPrice" + }, + { + "name": "Class", + "dataType": "string", + "sourceColumn": "Class" + }, + { + "name": "Style", + "dataType": "string", + "sourceColumn": "Style" + }, + { + "name": "ModelName", + "dataType": "string", + "sourceColumn": "ModelName" + }, + { + "name": "EnglishDescription", + "dataType": "string", + "sourceColumn": "EnglishDescription" + }, + { + "name": "StartDate", + "dataType": "dateTime", + "sourceColumn": "StartDate" + }, + { + "name": "EndDate", + "dataType": "dateTime", + "sourceColumn": "EndDate" + }, + { + "name": "Status", + "dataType": "string", + "sourceColumn": "Status" + }, + { + "type": "calculated", + "name": "ProductSubCategoryName", + "dataType": "string", + "isDataTypeInferred": true, + "expression": "RELATED('DimProductSubcategory'[EnglishProductSubcategoryName]) " + }, + { + "type": "calculated", + "name": "ProductCategoryName", + "dataType": "string", + "isDataTypeInferred": true, + "expression": "RELATED('DimProductCategory'[EnglishProductCategoryName]) " + } + ], + "partitions": [ + { + "name": "DimProduct", + "dataView": "full", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_DimProduct = Source{[Schema=\"dbo\",Item=\"DimProduct\"]}[Data],", + " #\"Removed Columns\" = Table.RemoveColumns(dbo_DimProduct,{\"SpanishProductName\", \"FrenchProductName\", \"FrenchDescription\", \"ChineseDescription\", \"ArabicDescription\", \"HebrewDescription\", \"ThaiDescription\", \"GermanDescription\", \"JapaneseDescription\", \"TurkishDescription\"})", + "in", + " #\"Removed Columns\"" + ] + } + } + ], + "hierarchies": [ + { + "name": "Category", + "levels": [ + { + "name": "Product", + "ordinal": 3, + "column": "EnglishProductName" + }, + { + "name": "Category", + "ordinal": 0, + "column": "ProductCategoryName" + }, + { + "name": "SubCategory", + "ordinal": 1, + "column": "ProductSubCategoryName" + }, + { + "name": "Model", + "ordinal": 2, + "column": "ModelName" + } + ] + } + ] + }, + { + "name": "DimGeography", + "columns": [ + { + "name": "GeographyKey", + "dataType": "int64", + "sourceColumn": "GeographyKey" + }, + { + "name": "City", + "dataType": "string", + "sourceColumn": "City" + }, + { + "name": "StateProvinceCode", + "dataType": "string", + "sourceColumn": "StateProvinceCode" + }, + { + "name": "StateProvince", + "dataType": "string", + "sourceColumn": "StateProvinceName" + }, + { + "name": "CountryCode", + "dataType": "string", + "sourceColumn": "CountryRegionCode" + }, + { + "name": "Country", + "dataType": "string", + "sourceColumn": "EnglishCountryRegionName" + }, + { + "name": "PostalCode", + "dataType": "string", + "sourceColumn": "PostalCode" + }, + { + "name": "SalesTerritoryKey", + "dataType": "int64", + "sourceColumn": "SalesTerritoryKey" + }, + { + "name": "IpAddressLocator", + "dataType": "string", + "sourceColumn": "IpAddressLocator" + } + ], + "partitions": [ + { + "name": "DimGeography", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_DimGeography = Source{[Schema=\"dbo\",Item=\"DimGeography\"]}[Data]", + "in", + " dbo_DimGeography" + ] + }, + "annotations": [ + { + "name": "QueryEditorSerialization", + "value": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_DimGeography = Source{[Schema=\"dbo\",Item=\"DimGeography\"]}[Data]", + "in", + " dbo_DimGeographyText]]>" + ] + } + ] + } + ] + }, + { + "name": "DimProductSubcategory", + "columns": [ + { + "name": "ProductSubcategoryKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryKey" + }, + { + "name": "ProductSubcategoryAlternateKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryAlternateKey" + }, + { + "name": "EnglishProductSubcategoryName", + "dataType": "string", + "sourceColumn": "EnglishProductSubcategoryName" + }, + { + "name": "ProductCategoryKey", + "dataType": "int64", + "sourceColumn": "ProductCategoryKey" + } + ], + "partitions": [ + { + "name": "DimProductSubcategory", + "dataView": "full", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_DimProductSubcategory = Source{[Schema=\"dbo\",Item=\"DimProductSubcategory\"]}[Data],", + " #\"Removed Columns\" = Table.RemoveColumns(dbo_DimProductSubcategory,{\"SpanishProductSubcategoryName\", \"FrenchProductSubcategoryName\"})", + "in", + " #\"Removed Columns\"" + ] + } + } + ] + }, + { + "name": "DimProductCategory", + "columns": [ + { + "name": "ProductCategoryKey", + "dataType": "int64", + "sourceColumn": "ProductCategoryKey" + }, + { + "name": "ProductCategoryAlternateKey", + "dataType": "int64", + "sourceColumn": "ProductCategoryAlternateKey" + }, + { + "name": "EnglishProductCategoryName", + "dataType": "string", + "sourceColumn": "EnglishProductCategoryName" + } + ], + "partitions": [ + { + "name": "DimProductCategory", + "dataView": "full", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_DimProductCategory = Source{[Schema=\"dbo\",Item=\"DimProductCategory\"]}[Data],", + " #\"Removed Columns\" = Table.RemoveColumns(dbo_DimProductCategory,{\"SpanishProductCategoryName\", \"FrenchProductCategoryName\"})", + "in", + " #\"Removed Columns\"" + ] + } + } + ] + }, + { + "name": "FactInternetSalesAgg", + "columns": [ + { + "name": "OrderDateKey", + "dataType": "int64", + "sourceColumn": "OrderDateKey" + }, + { + "name": "CustomerKey", + "dataType": "int64", + "sourceColumn": "CustomerKey" + }, + { + "name": "ProductSubcategoryKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryKey" + }, + { + "name": "SalesAmount_Sum", + "dataType": "decimal", + "sourceColumn": "SalesAmount_Sum" + }, + { + "name": "UnitPrice_Sum", + "dataType": "decimal", + "sourceColumn": "UnitPrice_Sum" + }, + { + "name": "UnitPrice_Count", + "dataType": "int64", + "sourceColumn": "UnitPrice_Count", + "formatString": "0" + }, + { + "name": "FactInternetSales_Count", + "dataType": "int64", + "sourceColumn": "FactInternetSales_Count", + "formatString": "0" + } + ], + "partitions": [ + { + "name": "Partition", + "dataView": "full", + "source": { + "type": "m", + "expression": [ + "let", + " Source = #\"SQL/localhost\\SP1;AdventureWorksDW\",", + " dbo_FactInternetSalesAgg = Source{[Schema=\"dbo\",Item=\"FactInternetSalesAgg\"]}[Data]", + "in", + " dbo_FactInternetSalesAgg" + ] + } + } + ] + } + ], + "relationships": [ + { + "name": "eac275ef-12ed-44ab-95c5-367fe2964b7a", + "fromTable": "FactInternetSales", + "fromColumn": "CustomerKey", + "toTable": "DimCustomer", + "toColumn": "CustomerKey" + }, + { + "name": "a5c2f953-e0a8-4f12-984a-82eba386bc31", + "fromTable": "FactInternetSales", + "fromColumn": "ProductKey", + "toTable": "DimProduct", + "toColumn": "ProductKey" + }, + { + "name": "2f03b75d-266f-4c06-bf9a-c00a2a5fe63f", + "fromTable": "DimCustomer", + "fromColumn": "GeographyKey", + "toTable": "DimGeography", + "toColumn": "GeographyKey" + }, + { + "name": "c3b3fe98-c83c-4340-89dc-0cdb8acba196", + "fromTable": "DimProduct", + "fromColumn": "ProductSubcategoryKey", + "toTable": "DimProductSubcategory", + "toColumn": "ProductSubcategoryKey" + }, + { + "name": "fbe2a336-e918-4bc2-9765-da912e40e48b", + "fromTable": "DimProductSubcategory", + "fromColumn": "ProductCategoryKey", + "toTable": "DimProductCategory", + "toColumn": "ProductCategoryKey" + }, + { + "name": "ae49b4e7-772e-4fde-a7e4-3f5f80915766", + "fromTable": "FactInternetSales", + "fromColumn": "OrderDateKey", + "toTable": "DimDate", + "toColumn": "DateKey" + }, + { + "name": "72d7695a-23c7-4841-8127-421a75135b9b", + "fromTable": "FactInternetSalesAgg", + "fromColumn": "OrderDateKey", + "toTable": "DimDate", + "toColumn": "DateKey" + }, + { + "name": "b8437b63-432f-4346-ab7a-c8a3402162a6", + "fromTable": "FactInternetSalesAgg", + "fromColumn": "CustomerKey", + "toTable": "DimCustomer", + "toColumn": "CustomerKey" + }, + { + "name": "6e65c31f-3484-4301-b797-97fa8d62ebec", + "fromTable": "FactInternetSalesAgg", + "fromColumn": "ProductSubcategoryKey", + "toTable": "DimProductSubcategory", + "toColumn": "ProductSubcategoryKey" + } + ], + "perspectives": [ + { + "name": "Internet Sales", + "tables": [ + { + "name": "DimDate", + "columns": [ + { + "name": "CalendarQuarter" + }, + { + "name": "CalendarSemester" + }, + { + "name": "CalendarYear" + }, + { + "name": "Date" + }, + { + "name": "DateKey" + }, + { + "name": "DayNumberOfMonth" + }, + { + "name": "DayNumberOfWeek" + }, + { + "name": "DayNumberOfYear" + }, + { + "name": "EnglishDayNameOfWeek" + }, + { + "name": "EnglishMonthName" + }, + { + "name": "FiscalQuarter" + }, + { + "name": "FiscalSemester" + }, + { + "name": "FiscalYear" + }, + { + "name": "MonthNumberOfYear" + }, + { + "name": "WeekNumberOfYear" + } + ], + "hierarchies": [ + { + "name": "Calendar" + }, + { + "name": "Fiscal" + } + ], + "measures": [ + { + "name": "DaysCurrentQuarterToDate" + }, + { + "name": "DaysInCurrentQuarter" + } + ] + }, + { + "name": "DimGeography", + "columns": [ + { + "name": "City" + }, + { + "name": "CountryCode" + }, + { + "name": "Country" + }, + { + "name": "GeographyKey" + }, + { + "name": "IpAddressLocator" + }, + { + "name": "PostalCode" + }, + { + "name": "SalesTerritoryKey" + }, + { + "name": "StateProvinceCode" + }, + { + "name": "StateProvince" + } + ] + }, + { + "name": "DimProduct", + "columns": [ + { + "name": "Class" + }, + { + "name": "Color" + }, + { + "name": "DaysToManufacture" + }, + { + "name": "DealerPrice" + }, + { + "name": "EndDate" + }, + { + "name": "EnglishDescription" + }, + { + "name": "EnglishProductName" + }, + { + "name": "FinishedGoodsFlag" + }, + { + "name": "ListPrice" + }, + { + "name": "ModelName" + }, + { + "name": "ProductAlternateKey" + }, + { + "name": "ProductKey" + }, + { + "name": "ProductLine" + }, + { + "name": "ProductSubcategoryKey" + }, + { + "name": "ReorderPoint" + }, + { + "name": "SafetyStockLevel" + }, + { + "name": "Size" + }, + { + "name": "SizeRange" + }, + { + "name": "SizeUnitMeasureCode" + }, + { + "name": "StandardCost" + }, + { + "name": "StartDate" + }, + { + "name": "Status" + }, + { + "name": "Style" + }, + { + "name": "Weight" + }, + { + "name": "WeightUnitMeasureCode" + } + ] + }, + { + "name": "DimProductCategory", + "columns": [ + { + "name": "EnglishProductCategoryName" + }, + { + "name": "ProductCategoryAlternateKey" + }, + { + "name": "ProductCategoryKey" + } + ] + }, + { + "name": "DimProductSubcategory", + "columns": [ + { + "name": "EnglishProductSubcategoryName" + }, + { + "name": "ProductCategoryKey" + }, + { + "name": "ProductSubcategoryAlternateKey" + }, + { + "name": "ProductSubcategoryKey" + } + ] + }, + { + "name": "FactInternetSales", + "columns": [ + { + "name": "CarrierTrackingNumber" + }, + { + "name": "CurrencyKey" + }, + { + "name": "CustomerKey" + }, + { + "name": "CustomerPONumber" + }, + { + "name": "DiscountAmount" + }, + { + "name": "DueDate" + }, + { + "name": "DueDateKey" + }, + { + "name": "ExtendedAmount" + }, + { + "name": "Freight" + }, + { + "name": "Margin" + }, + { + "name": "OrderDate" + }, + { + "name": "OrderDateKey" + }, + { + "name": "OrderQuantity" + }, + { + "name": "ProductKey" + }, + { + "name": "ProductStandardCost" + }, + { + "name": "PromotionKey" + }, + { + "name": "RevisionNumber" + }, + { + "name": "SalesAmount" + }, + { + "name": "SalesOrderLineNumber" + }, + { + "name": "SalesOrderNumber" + }, + { + "name": "SalesTerritoryKey" + }, + { + "name": "ShipDate" + }, + { + "name": "ShipDateKey" + }, + { + "name": "TaxAmt" + }, + { + "name": "TotalProductCost" + }, + { + "name": "UnitPrice" + }, + { + "name": "UnitPriceDiscountPct" + } + ], + "measures": [ + { + "name": "InternetCurrentQuarterMargin" + }, + { + "name": "InternetCurrentQuarterSales" + }, + { + "name": "InternetDistinctCountSalesOrder" + }, + { + "name": "InternetOrderLinesCount" + }, + { + "name": "InternetPreviousQuarterMargin" + }, + { + "name": "InternetPreviousQuarterMarginProportionToQTD" + }, + { + "name": "InternetPreviousQuarterSales" + }, + { + "name": "InternetPreviousQuarterSalesProportionToQTD" + }, + { + "name": "InternetTotalDiscountAmount" + }, + { + "name": "InternetTotalFreight" + }, + { + "name": "InternetTotalMargin" + }, + { + "name": "InternetTotalProductCost" + }, + { + "name": "InternetTotalSales" + }, + { + "name": "InternetTotalTaxAmt" + }, + { + "name": "InternetTotalUnits" + }, + { + "name": "InternetCurrentQuarterMarginPerformance" + }, + { + "name": "InternetCurrentQuarterSalesPerformance" + } + ] + } + ] + } + ], + "expressions": [ + { + "name": "RangeStart", + "kind": "m", + "expression": [ + "let", + " Source = #datetime(2013, 6, 1, 0, 0, 0) meta [IsParameterQuery=true, Type=\"DateTime\", IsParameterQueryRequired=true]", + "in", + " Source" + ] + }, + { + "name": "RangeEnd", + "kind": "m", + "expression": [ + "let", + " Source = #datetime(2013, 6, 8, 0, 0, 0) meta [IsParameterQuery=true, Type=\"DateTime\", IsParameterQueryRequired=true]", + "in", + " Source" + ] + } + ], + "annotations": [ + { + "name": "ClientCompatibilityLevel", + "value": "500" + } + ] + }, + "id": "SemanticModel" +} \ No newline at end of file diff --git a/SetUpAggs/AdventureWorksAggsProvider/AdventureWorksAggsProvider.smproj b/SetUpAggs/AdventureWorksAggsProvider/AdventureWorksAggsProvider.smproj new file mode 100644 index 0000000..13c4019 --- /dev/null +++ b/SetUpAggs/AdventureWorksAggsProvider/AdventureWorksAggsProvider.smproj @@ -0,0 +1,45 @@ + + + Development + 2.0 + {274b7b29-6eae-44ce-a06b-ed91f1e52734} + Exe + MyRootNamespace + MyAssemblyName + false + bin\ + AdventureWorksAggsProvider + + + bin\ + asazure://southcentralus.asazure.windows.net/chwade003 + Developer + Unknown + AdventureWorksAggsProvider_PH + Model + Default + False + Default + InMemory + Default + + + asazure://aspaastest14.asazure-int.windows.net/sukanyasaltsrc1 + Developer + Unknown + AdventureWorksAggsProvider + Model + Default + False + Default + InMemory + Default + + + + + Code + + + + \ No newline at end of file diff --git a/SetUpAggs/AdventureWorksAggsProvider/Model.bim b/SetUpAggs/AdventureWorksAggsProvider/Model.bim new file mode 100644 index 0000000..84698fb --- /dev/null +++ b/SetUpAggs/AdventureWorksAggsProvider/Model.bim @@ -0,0 +1,1263 @@ +{ + "name": "SemanticModel", + "compatibilityLevel": 1400, + "model": { + "defaultMode": "directQuery", + "culture": "en-US", + "dataSources": [ + { + "name": "SqlServer chwadeaggs.database.windows.net chwadeAW", + "connectionString": "Provider=SQLNCLI11;Data Source=chwadeaggs.database.windows.net;Initial Catalog=chwadeAW;User ID=Jim;Persist Security Info=true", + "impersonationMode": "impersonateServiceAccount", + "annotations": [ + { + "name": "ConnectionEditUISource", + "value": "SqlServer" + } + ] + } + ], + "tables": [ + { + "name": "DimCustomer", + "columns": [ + { + "name": "CustomerKey", + "dataType": "int64", + "sourceColumn": "CustomerKey", + "sourceProviderType": "Integer" + }, + { + "name": "GeographyKey", + "dataType": "int64", + "sourceColumn": "GeographyKey", + "sourceProviderType": "Integer" + }, + { + "name": "CustomerAlternateKey", + "dataType": "string", + "sourceColumn": "CustomerAlternateKey", + "sourceProviderType": "WChar" + }, + { + "name": "Title", + "dataType": "string", + "sourceColumn": "Title", + "sourceProviderType": "WChar" + }, + { + "name": "FirstName", + "dataType": "string", + "sourceColumn": "FirstName", + "sourceProviderType": "WChar" + }, + { + "name": "MiddleName", + "dataType": "string", + "sourceColumn": "MiddleName", + "sourceProviderType": "WChar" + }, + { + "name": "LastName", + "dataType": "string", + "sourceColumn": "LastName", + "sourceProviderType": "WChar" + }, + { + "name": "NameStyle", + "dataType": "boolean", + "sourceColumn": "NameStyle", + "formatString": "\"TRUE\";\"TRUE\";\"FALSE\"", + "sourceProviderType": "Boolean" + }, + { + "name": "BirthDate", + "dataType": "dateTime", + "sourceColumn": "BirthDate", + "formatString": "General Date", + "sourceProviderType": "DBDate" + }, + { + "name": "MaritalStatus", + "dataType": "string", + "sourceColumn": "MaritalStatus", + "sourceProviderType": "WChar" + }, + { + "name": "Suffix", + "dataType": "string", + "sourceColumn": "Suffix", + "sourceProviderType": "WChar" + }, + { + "name": "Gender", + "dataType": "string", + "sourceColumn": "Gender", + "sourceProviderType": "WChar" + }, + { + "name": "EmailAddress", + "dataType": "string", + "sourceColumn": "EmailAddress", + "sourceProviderType": "WChar" + }, + { + "name": "YearlyIncome", + "dataType": "decimal", + "sourceColumn": "YearlyIncome", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "TotalChildren", + "dataType": "int64", + "sourceColumn": "TotalChildren", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "NumberChildrenAtHome", + "dataType": "int64", + "sourceColumn": "NumberChildrenAtHome", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "EnglishEducation", + "dataType": "string", + "sourceColumn": "EnglishEducation", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishEducation", + "dataType": "string", + "sourceColumn": "SpanishEducation", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchEducation", + "dataType": "string", + "sourceColumn": "FrenchEducation", + "sourceProviderType": "WChar" + }, + { + "name": "EnglishOccupation", + "dataType": "string", + "sourceColumn": "EnglishOccupation", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishOccupation", + "dataType": "string", + "sourceColumn": "SpanishOccupation", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchOccupation", + "dataType": "string", + "sourceColumn": "FrenchOccupation", + "sourceProviderType": "WChar" + }, + { + "name": "HouseOwnerFlag", + "dataType": "string", + "sourceColumn": "HouseOwnerFlag", + "sourceProviderType": "WChar" + }, + { + "name": "NumberCarsOwned", + "dataType": "int64", + "sourceColumn": "NumberCarsOwned", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "AddressLine1", + "dataType": "string", + "sourceColumn": "AddressLine1", + "sourceProviderType": "WChar" + }, + { + "name": "AddressLine2", + "dataType": "string", + "sourceColumn": "AddressLine2", + "sourceProviderType": "WChar" + }, + { + "name": "Phone", + "dataType": "string", + "sourceColumn": "Phone", + "sourceProviderType": "WChar" + }, + { + "name": "DateFirstPurchase", + "dataType": "dateTime", + "sourceColumn": "DateFirstPurchase", + "formatString": "General Date", + "sourceProviderType": "DBDate" + }, + { + "name": "CommuteDistance", + "dataType": "string", + "sourceColumn": "CommuteDistance", + "sourceProviderType": "WChar" + } + ], + "partitions": [ + { + "name": "DimCustomer", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[DimCustomer].* FROM [dbo].[DimCustomer] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[DimCustomer].* FROM [dbo].[DimCustomer] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "DimCustomer" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + }, + { + "name": "DimDate", + "columns": [ + { + "name": "DateKey", + "dataType": "int64", + "sourceColumn": "DateKey", + "sourceProviderType": "Integer" + }, + { + "name": "FullDateAlternateKey", + "dataType": "dateTime", + "sourceColumn": "FullDateAlternateKey", + "formatString": "General Date", + "sourceProviderType": "DBDate" + }, + { + "name": "DayNumberOfWeek", + "dataType": "int64", + "sourceColumn": "DayNumberOfWeek", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "EnglishDayNameOfWeek", + "dataType": "string", + "sourceColumn": "EnglishDayNameOfWeek", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishDayNameOfWeek", + "dataType": "string", + "sourceColumn": "SpanishDayNameOfWeek", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchDayNameOfWeek", + "dataType": "string", + "sourceColumn": "FrenchDayNameOfWeek", + "sourceProviderType": "WChar" + }, + { + "name": "DayNumberOfMonth", + "dataType": "int64", + "sourceColumn": "DayNumberOfMonth", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "DayNumberOfYear", + "dataType": "int64", + "sourceColumn": "DayNumberOfYear", + "sourceProviderType": "SmallInt" + }, + { + "name": "WeekNumberOfYear", + "dataType": "int64", + "sourceColumn": "WeekNumberOfYear", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "EnglishMonthName", + "dataType": "string", + "sourceColumn": "EnglishMonthName", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishMonthName", + "dataType": "string", + "sourceColumn": "SpanishMonthName", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchMonthName", + "dataType": "string", + "sourceColumn": "FrenchMonthName", + "sourceProviderType": "WChar" + }, + { + "name": "MonthNumberOfYear", + "dataType": "int64", + "sourceColumn": "MonthNumberOfYear", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "CalendarQuarter", + "dataType": "int64", + "sourceColumn": "CalendarQuarter", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "CalendarYear", + "dataType": "int64", + "sourceColumn": "CalendarYear", + "sourceProviderType": "SmallInt" + }, + { + "name": "CalendarSemester", + "dataType": "int64", + "sourceColumn": "CalendarSemester", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "FiscalQuarter", + "dataType": "int64", + "sourceColumn": "FiscalQuarter", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "FiscalYear", + "dataType": "int64", + "sourceColumn": "FiscalYear", + "sourceProviderType": "SmallInt" + }, + { + "name": "FiscalSemester", + "dataType": "int64", + "sourceColumn": "FiscalSemester", + "sourceProviderType": "UnsignedTinyInt" + } + ], + "partitions": [ + { + "name": "DimDate", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[DimDate].* FROM [dbo].[DimDate] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[DimDate].* FROM [dbo].[DimDate] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "DimDate" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + }, + { + "name": "DimGeography", + "columns": [ + { + "name": "GeographyKey", + "dataType": "int64", + "sourceColumn": "GeographyKey", + "sourceProviderType": "Integer" + }, + { + "name": "City", + "dataType": "string", + "sourceColumn": "City", + "sourceProviderType": "WChar" + }, + { + "name": "StateProvinceCode", + "dataType": "string", + "sourceColumn": "StateProvinceCode", + "sourceProviderType": "WChar" + }, + { + "name": "StateProvinceName", + "dataType": "string", + "sourceColumn": "StateProvinceName", + "sourceProviderType": "WChar" + }, + { + "name": "CountryRegionCode", + "dataType": "string", + "sourceColumn": "CountryRegionCode", + "sourceProviderType": "WChar" + }, + { + "name": "EnglishCountryRegionName", + "dataType": "string", + "sourceColumn": "EnglishCountryRegionName", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishCountryRegionName", + "dataType": "string", + "sourceColumn": "SpanishCountryRegionName", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchCountryRegionName", + "dataType": "string", + "sourceColumn": "FrenchCountryRegionName", + "sourceProviderType": "WChar" + }, + { + "name": "PostalCode", + "dataType": "string", + "sourceColumn": "PostalCode", + "sourceProviderType": "WChar" + }, + { + "name": "SalesTerritoryKey", + "dataType": "int64", + "sourceColumn": "SalesTerritoryKey", + "sourceProviderType": "Integer" + }, + { + "name": "IpAddressLocator", + "dataType": "string", + "sourceColumn": "IpAddressLocator", + "sourceProviderType": "WChar" + } + ], + "partitions": [ + { + "name": "DimGeography", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[DimGeography].* FROM [dbo].[DimGeography] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[DimGeography].* FROM [dbo].[DimGeography] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "DimGeography" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + }, + { + "name": "DimProduct", + "columns": [ + { + "name": "ProductKey", + "dataType": "int64", + "sourceColumn": "ProductKey", + "sourceProviderType": "Integer" + }, + { + "name": "ProductAlternateKey", + "dataType": "string", + "sourceColumn": "ProductAlternateKey", + "sourceProviderType": "WChar" + }, + { + "name": "ProductSubcategoryKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryKey", + "sourceProviderType": "Integer" + }, + { + "name": "WeightUnitMeasureCode", + "dataType": "string", + "sourceColumn": "WeightUnitMeasureCode", + "sourceProviderType": "WChar" + }, + { + "name": "SizeUnitMeasureCode", + "dataType": "string", + "sourceColumn": "SizeUnitMeasureCode", + "sourceProviderType": "WChar" + }, + { + "name": "EnglishProductName", + "dataType": "string", + "sourceColumn": "EnglishProductName", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishProductName", + "dataType": "string", + "sourceColumn": "SpanishProductName", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchProductName", + "dataType": "string", + "sourceColumn": "FrenchProductName", + "sourceProviderType": "WChar" + }, + { + "name": "StandardCost", + "dataType": "decimal", + "sourceColumn": "StandardCost", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "FinishedGoodsFlag", + "dataType": "boolean", + "sourceColumn": "FinishedGoodsFlag", + "formatString": "\"TRUE\";\"TRUE\";\"FALSE\"", + "sourceProviderType": "Boolean" + }, + { + "name": "Color", + "dataType": "string", + "sourceColumn": "Color", + "sourceProviderType": "WChar" + }, + { + "name": "SafetyStockLevel", + "dataType": "int64", + "sourceColumn": "SafetyStockLevel", + "sourceProviderType": "SmallInt" + }, + { + "name": "ReorderPoint", + "dataType": "int64", + "sourceColumn": "ReorderPoint", + "sourceProviderType": "SmallInt" + }, + { + "name": "ListPrice", + "dataType": "decimal", + "sourceColumn": "ListPrice", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "Size", + "dataType": "string", + "sourceColumn": "Size", + "sourceProviderType": "WChar" + }, + { + "name": "SizeRange", + "dataType": "string", + "sourceColumn": "SizeRange", + "sourceProviderType": "WChar" + }, + { + "name": "Weight", + "dataType": "double", + "sourceColumn": "Weight", + "sourceProviderType": "Double" + }, + { + "name": "DaysToManufacture", + "dataType": "int64", + "sourceColumn": "DaysToManufacture", + "sourceProviderType": "Integer" + }, + { + "name": "ProductLine", + "dataType": "string", + "sourceColumn": "ProductLine", + "sourceProviderType": "WChar" + }, + { + "name": "DealerPrice", + "dataType": "decimal", + "sourceColumn": "DealerPrice", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "Class", + "dataType": "string", + "sourceColumn": "Class", + "sourceProviderType": "WChar" + }, + { + "name": "Style", + "dataType": "string", + "sourceColumn": "Style", + "sourceProviderType": "WChar" + }, + { + "name": "ModelName", + "dataType": "string", + "sourceColumn": "ModelName", + "sourceProviderType": "WChar" + }, + { + "name": "EnglishDescription", + "dataType": "string", + "sourceColumn": "EnglishDescription", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchDescription", + "dataType": "string", + "sourceColumn": "FrenchDescription", + "sourceProviderType": "WChar" + }, + { + "name": "ChineseDescription", + "dataType": "string", + "sourceColumn": "ChineseDescription", + "sourceProviderType": "WChar" + }, + { + "name": "ArabicDescription", + "dataType": "string", + "sourceColumn": "ArabicDescription", + "sourceProviderType": "WChar" + }, + { + "name": "HebrewDescription", + "dataType": "string", + "sourceColumn": "HebrewDescription", + "sourceProviderType": "WChar" + }, + { + "name": "ThaiDescription", + "dataType": "string", + "sourceColumn": "ThaiDescription", + "sourceProviderType": "WChar" + }, + { + "name": "GermanDescription", + "dataType": "string", + "sourceColumn": "GermanDescription", + "sourceProviderType": "WChar" + }, + { + "name": "JapaneseDescription", + "dataType": "string", + "sourceColumn": "JapaneseDescription", + "sourceProviderType": "WChar" + }, + { + "name": "TurkishDescription", + "dataType": "string", + "sourceColumn": "TurkishDescription", + "sourceProviderType": "WChar" + }, + { + "name": "StartDate", + "dataType": "dateTime", + "sourceColumn": "StartDate", + "formatString": "General Date", + "sourceProviderType": "DBTimeStamp" + }, + { + "name": "EndDate", + "dataType": "dateTime", + "sourceColumn": "EndDate", + "formatString": "General Date", + "sourceProviderType": "DBTimeStamp" + }, + { + "name": "Status", + "dataType": "string", + "sourceColumn": "Status", + "sourceProviderType": "WChar" + } + ], + "partitions": [ + { + "name": "DimProduct", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[DimProduct].* FROM [dbo].[DimProduct] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[DimProduct].* FROM [dbo].[DimProduct] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "DimProduct" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + }, + { + "name": "DimProductCategory", + "columns": [ + { + "name": "ProductCategoryKey", + "dataType": "int64", + "sourceColumn": "ProductCategoryKey", + "sourceProviderType": "Integer" + }, + { + "name": "ProductCategoryAlternateKey", + "dataType": "int64", + "sourceColumn": "ProductCategoryAlternateKey", + "sourceProviderType": "Integer" + }, + { + "name": "EnglishProductCategoryName", + "dataType": "string", + "sourceColumn": "EnglishProductCategoryName", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishProductCategoryName", + "dataType": "string", + "sourceColumn": "SpanishProductCategoryName", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchProductCategoryName", + "dataType": "string", + "sourceColumn": "FrenchProductCategoryName", + "sourceProviderType": "WChar" + } + ], + "partitions": [ + { + "name": "DimProductCategory", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[DimProductCategory].* FROM [dbo].[DimProductCategory] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[DimProductCategory].* FROM [dbo].[DimProductCategory] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "DimProductCategory" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + }, + { + "name": "DimProductSubcategory", + "columns": [ + { + "name": "ProductSubcategoryKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryKey", + "sourceProviderType": "Integer" + }, + { + "name": "ProductSubcategoryAlternateKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryAlternateKey", + "sourceProviderType": "Integer" + }, + { + "name": "EnglishProductSubcategoryName", + "dataType": "string", + "sourceColumn": "EnglishProductSubcategoryName", + "sourceProviderType": "WChar" + }, + { + "name": "SpanishProductSubcategoryName", + "dataType": "string", + "sourceColumn": "SpanishProductSubcategoryName", + "sourceProviderType": "WChar" + }, + { + "name": "FrenchProductSubcategoryName", + "dataType": "string", + "sourceColumn": "FrenchProductSubcategoryName", + "sourceProviderType": "WChar" + }, + { + "name": "ProductCategoryKey", + "dataType": "int64", + "sourceColumn": "ProductCategoryKey", + "sourceProviderType": "Integer" + } + ], + "partitions": [ + { + "name": "DimProductSubcategory", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[DimProductSubcategory].* FROM [dbo].[DimProductSubcategory] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[DimProductSubcategory].* FROM [dbo].[DimProductSubcategory] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "DimProductSubcategory" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + }, + { + "name": "FactInternetSales", + "columns": [ + { + "name": "ProductKey", + "dataType": "int64", + "sourceColumn": "ProductKey", + "sourceProviderType": "Integer" + }, + { + "name": "OrderDateKey", + "dataType": "int64", + "sourceColumn": "OrderDateKey", + "sourceProviderType": "Integer" + }, + { + "name": "DueDateKey", + "dataType": "int64", + "sourceColumn": "DueDateKey", + "sourceProviderType": "Integer" + }, + { + "name": "ShipDateKey", + "dataType": "int64", + "sourceColumn": "ShipDateKey", + "sourceProviderType": "Integer" + }, + { + "name": "CustomerKey", + "dataType": "int64", + "sourceColumn": "CustomerKey", + "sourceProviderType": "Integer" + }, + { + "name": "PromotionKey", + "dataType": "int64", + "sourceColumn": "PromotionKey", + "sourceProviderType": "Integer" + }, + { + "name": "CurrencyKey", + "dataType": "int64", + "sourceColumn": "CurrencyKey", + "sourceProviderType": "Integer" + }, + { + "name": "SalesTerritoryKey", + "dataType": "int64", + "sourceColumn": "SalesTerritoryKey", + "sourceProviderType": "Integer" + }, + { + "name": "SalesOrderNumber", + "dataType": "string", + "sourceColumn": "SalesOrderNumber", + "sourceProviderType": "WChar" + }, + { + "name": "SalesOrderLineNumber", + "dataType": "int64", + "sourceColumn": "SalesOrderLineNumber", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "RevisionNumber", + "dataType": "int64", + "sourceColumn": "RevisionNumber", + "sourceProviderType": "UnsignedTinyInt" + }, + { + "name": "OrderQuantity", + "dataType": "int64", + "sourceColumn": "OrderQuantity", + "sourceProviderType": "SmallInt" + }, + { + "name": "UnitPrice", + "dataType": "decimal", + "sourceColumn": "UnitPrice", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "ExtendedAmount", + "dataType": "decimal", + "sourceColumn": "ExtendedAmount", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "UnitPriceDiscountPct", + "dataType": "double", + "sourceColumn": "UnitPriceDiscountPct", + "sourceProviderType": "Double" + }, + { + "name": "DiscountAmount", + "dataType": "double", + "sourceColumn": "DiscountAmount", + "sourceProviderType": "Double" + }, + { + "name": "ProductStandardCost", + "dataType": "decimal", + "sourceColumn": "ProductStandardCost", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "TotalProductCost", + "dataType": "decimal", + "sourceColumn": "TotalProductCost", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "SalesAmount", + "dataType": "decimal", + "sourceColumn": "SalesAmount", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "TaxAmt", + "dataType": "decimal", + "sourceColumn": "TaxAmt", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "Freight", + "dataType": "decimal", + "sourceColumn": "Freight", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "CarrierTrackingNumber", + "dataType": "string", + "sourceColumn": "CarrierTrackingNumber", + "sourceProviderType": "WChar" + }, + { + "name": "CustomerPONumber", + "dataType": "string", + "sourceColumn": "CustomerPONumber", + "sourceProviderType": "WChar" + }, + { + "name": "OrderDate", + "dataType": "dateTime", + "sourceColumn": "OrderDate", + "formatString": "General Date", + "sourceProviderType": "DBTimeStamp" + }, + { + "name": "DueDate", + "dataType": "dateTime", + "sourceColumn": "DueDate", + "formatString": "General Date", + "sourceProviderType": "DBTimeStamp" + }, + { + "name": "ShipDate", + "dataType": "dateTime", + "sourceColumn": "ShipDate", + "formatString": "General Date", + "sourceProviderType": "DBTimeStamp" + }, + { + "name": "LastUpdateDate", + "dataType": "dateTime", + "sourceColumn": "LastUpdateDate", + "formatString": "General Date", + "sourceProviderType": "DBTimeStamp" + } + ], + "partitions": [ + { + "name": "FactInternetSales", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[FactInternetSales].* FROM [dbo].[FactInternetSales] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[FactInternetSales].* FROM [dbo].[FactInternetSales] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "FactInternetSales" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + }, + { + "name": "FactInternetSalesAgg", + "columns": [ + { + "name": "OrderDateKey", + "dataType": "int64", + "sourceColumn": "OrderDateKey", + "sourceProviderType": "Integer" + }, + { + "name": "CustomerKey", + "dataType": "int64", + "sourceColumn": "CustomerKey", + "sourceProviderType": "Integer" + }, + { + "name": "ProductSubcategoryKey", + "dataType": "int64", + "sourceColumn": "ProductSubcategoryKey", + "sourceProviderType": "Integer" + }, + { + "name": "SalesAmount_Sum", + "dataType": "decimal", + "sourceColumn": "SalesAmount_Sum", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "UnitPrice_Sum", + "dataType": "decimal", + "sourceColumn": "UnitPrice_Sum", + "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00", + "sourceProviderType": "Currency", + "annotations": [ + { + "name": "Format", + "value": "" + } + ] + }, + { + "name": "UnitPrice_Count", + "dataType": "int64", + "sourceColumn": "UnitPrice_Count", + "sourceProviderType": "Integer" + }, + { + "name": "FactInternetSales_Count", + "dataType": "int64", + "sourceColumn": "FactInternetSales_Count", + "sourceProviderType": "Integer" + } + ], + "partitions": [ + { + "name": "FactInternetSalesAgg", + "dataView": "full", + "source": { + "query": " SELECT [dbo].[FactInternetSalesAgg].* FROM [dbo].[FactInternetSalesAgg] ", + "dataSource": "SqlServer chwadeaggs.database.windows.net chwadeAW" + } + } + ], + "annotations": [ + { + "name": "_TM_ExtProp_QueryDefinition", + "value": " SELECT [dbo].[FactInternetSalesAgg].* FROM [dbo].[FactInternetSalesAgg] " + }, + { + "name": "_TM_ExtProp_DbTableName", + "value": "FactInternetSalesAgg" + }, + { + "name": "_TM_ExtProp_DbSchemaName", + "value": "dbo" + } + ] + } + ], + "relationships": [ + { + "name": "765aed4a-99a1-4e12-b9d3-89eaf354ed45", + "fromTable": "DimCustomer", + "fromColumn": "GeographyKey", + "toTable": "DimGeography", + "toColumn": "GeographyKey" + }, + { + "name": "e2140f6e-071b-49f4-834f-fbc1e24d0ad4", + "fromTable": "DimProduct", + "fromColumn": "ProductSubcategoryKey", + "toTable": "DimProductSubcategory", + "toColumn": "ProductSubcategoryKey" + }, + { + "name": "74ba0d0a-0c14-4e2b-9039-6b22915bcd1a", + "fromTable": "DimProductSubcategory", + "fromColumn": "ProductCategoryKey", + "toTable": "DimProductCategory", + "toColumn": "ProductCategoryKey" + }, + { + "name": "87da72af-3d4e-4db5-9b4f-68ff5ab46f8e", + "fromTable": "FactInternetSales", + "fromColumn": "CustomerKey", + "toTable": "DimCustomer", + "toColumn": "CustomerKey" + }, + { + "name": "812b8a30-9510-4748-aa13-33049751b839", + "fromTable": "FactInternetSales", + "fromColumn": "OrderDateKey", + "toTable": "DimDate", + "toColumn": "DateKey" + }, + { + "name": "5014d792-e9f6-4a74-9fbe-ecdcd2190ac1", + "fromTable": "FactInternetSales", + "fromColumn": "ProductKey", + "toTable": "DimProduct", + "toColumn": "ProductKey" + }, + { + "name": "0d09d702-9b79-4f5a-b163-f1519ed64f16", + "fromTable": "FactInternetSalesAgg", + "fromColumn": "OrderDateKey", + "toTable": "DimDate", + "toColumn": "DateKey" + }, + { + "name": "98080ee4-523f-4353-a1d8-5278ce1511f1", + "fromTable": "FactInternetSalesAgg", + "fromColumn": "CustomerKey", + "toTable": "DimCustomer", + "toColumn": "CustomerKey" + }, + { + "name": "575c575c-0564-4022-a6cd-95abcabefe37", + "fromTable": "FactInternetSalesAgg", + "fromColumn": "ProductSubcategoryKey", + "toTable": "DimProductSubcategory", + "toColumn": "ProductSubcategoryKey" + } + ], + "annotations": [ + { + "name": "ClientCompatibilityLevel", + "value": "500" + } + ] + }, + "id": "SemanticModel" +} \ No newline at end of file diff --git a/SetUpAggs/AggsConfig.json b/SetUpAggs/AggsConfig.json new file mode 100644 index 0000000..3460c5e --- /dev/null +++ b/SetUpAggs/AggsConfig.json @@ -0,0 +1,74 @@ +{ + "database": { + "name": "AdventureWorksAggsProvider_PH", + "tables": [ + { + "name": "DimGeography", + "mode": "Dual" + }, + { + "name": "DimCustomer", + "mode": "Dual" + }, + { + "name": "DimDate", + "mode": "Dual" + }, + { + "name": "DimProductSubcategory", + "mode": "Dual" + }, + { + "name": "DimProductCategory", + "mode": "Dual" + }, + { + "name": "FactInternetSalesAgg", + "mode": "Import", + "aggregationRules": [ + { + "aggTableColumn": "OrderDateKey", + "summarization": "GroupBy", + "detailTable": "FactInternetSales", + "detailTableColumn": "OrderDateKey" + }, + { + "aggTableColumn": "CustomerKey", + "summarization": "GroupBy", + "detailTable": "FactInternetSales", + "detailTableColumn": "CustomerKey" + }, + { + "aggTableColumn": "ProductSubcategoryKey", + "summarization": "GroupBy", + "detailTable": "DimProduct", + "detailTableColumn": "ProductSubcategoryKey" + }, + { + "aggTableColumn": "SalesAmount_Sum", + "summarization": "Sum", + "detailTable": "FactInternetSales", + "detailTableColumn": "SalesAmount" + }, + { + "aggTableColumn": "UnitPrice_Sum", + "summarization": "Min", + "detailTable": "FactInternetSales", + "detailTableColumn": "UnitPrice" + }, + { + "aggTableColumn": "UnitPrice_Count", + "summarization": "Count", + "detailTable": "FactInternetSales", + "detailTableColumn": "UnitPrice" + }, + { + "aggTableColumn": "FactInternetSales_Count", + "summarization": "CountTableRows", + "detailTable": "FactInternetSales" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/SetUpAggs/AggsConfig2.json b/SetUpAggs/AggsConfig2.json new file mode 100644 index 0000000..0c40309 --- /dev/null +++ b/SetUpAggs/AggsConfig2.json @@ -0,0 +1,74 @@ +{ + "database": { + "name": "AdventureWorksAggsProvider_PH", + "tables": [ + { + "name": "DimGeography", + "mode": "Dual" + }, + { + "name": "DimCustomer", + "mode": "Dual" + }, + { + "name": "DimDate", + "mode": "Dual" + }, + { + "name": "DimProductSubcategory", + "mode": "Dual" + }, + { + "name": "DimProductCategory", + "mode": "Dual" + }, + { + "name": "FactInternetSalesAgg", + "mode": "Import", + "aggregationRules": [ + { + "aggTableColumn": "OrderDateKey", + "summarization": "GroupBy", + "detailTable": "FactInternetSales", + "detailTableColumn": "OrderDateKey" + }, + { + "aggTableColumn": "CustomerKey", + "summarization": "GroupBy", + "detailTable": "FactInternetSales", + "detailTableColumn": "CustomerKey" + }, + { + "aggTableColumn": "ProductSubcategoryKey", + "summarization": "GroupBy", + "detailTable": "DimProduct", + "detailTableColumn": "ProductSubcategoryKey" + }, + { + "aggTableColumn": "SalesAmount_Sum", + "summarization": "Sum", + "detailTable": "FactInternetSales", + "detailTableColumn": "SalesAmount" + }, + { + "aggTableColumn": "UnitPrice_Sum", + "summarization": "Sum", + "detailTable": "FactInternetSales", + "detailTableColumn": "UnitPrice" + }, + { + "aggTableColumn": "UnitPrice_Count", + "summarization": "Count", + "detailTable": "FactInternetSales", + "detailTableColumn": "UnitPrice" + }, + { + "aggTableColumn": "FactInternetSales_Count", + "summarization": "CountTableRows", + "detailTable": "FactInternetSales" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/SetUpAggs/App.config b/SetUpAggs/App.config new file mode 100644 index 0000000..731f6de --- /dev/null +++ b/SetUpAggs/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SetUpAggs/Program.cs b/SetUpAggs/Program.cs new file mode 100644 index 0000000..7a5e16b --- /dev/null +++ b/SetUpAggs/Program.cs @@ -0,0 +1,463 @@ +using Microsoft.AnalysisServices.Tabular; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using PowerArgs; +using System.Globalization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace SetUpAggs +{ + #region JsonHelper Class + + public static class JsonHelper + { + public static string FromClass(T data, bool isEmptyToNull = false, + JsonSerializerSettings jsonSettings = null) + { + string response = string.Empty; + + if (!EqualityComparer.Default.Equals(data, default(T))) + response = JsonConvert.SerializeObject(data, jsonSettings); + + return isEmptyToNull ? (response == "{}" ? "null" : response) : response; + } + + public static T ToClass(string data, JsonSerializerSettings jsonSettings = null) + { + var response = default(T); + + if (!string.IsNullOrEmpty(data)) + response = jsonSettings == null + ? JsonConvert.DeserializeObject(data) + : JsonConvert.DeserializeObject(data, jsonSettings); + + return response; + } + } + #endregion + + #region Json Configuration Classes + + public partial class AggsConfiguration + { + [JsonProperty("database")] + public Database Database { get; set; } + } + + public partial class Database + { + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("tables")] + public Table[] Tables { get; set; } + } + + public partial class Table + { + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("mode")] + public string Mode { get; set; } + + [JsonProperty("aggregationRules", NullValueHandling = NullValueHandling.Ignore)] + public AggregationRule[] AggregationRules { get; set; } + } + + public partial class AggregationRule + { + [JsonProperty("aggTableColumn")] + public string AggTableColumn { get; set; } + + [JsonProperty("summarization")] + public string Summarization { get; set; } + + [JsonProperty("detailTable")] + public string DetailTable { get; set; } + + [JsonProperty("detailTableColumn", NullValueHandling = NullValueHandling.Ignore)] + public string DetailTableColumn { get; set; } + } + + public partial class Object + { + [JsonProperty("database")] + public string Database { get; set; } + } + + public partial class AggsConfiguration + { + public static AggsConfiguration FromJson(string json) => JsonConvert.DeserializeObject(json, SetUpAggs.Converter.Settings); + } + + public static class Serialize + { + public static string ToJson(this AggsConfiguration self) => JsonConvert.SerializeObject(self, SetUpAggs.Converter.Settings); + } + + internal static class Converter + { + public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings + { + MetadataPropertyHandling = MetadataPropertyHandling.Ignore, + DateParseHandling = DateParseHandling.None, + Converters = + { + new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } + }, + }; + } + #endregion + + #region Command Line Utility Arguments Handling + + [ArgExceptionBehavior(ArgExceptionPolicy.StandardExceptionHandling)] + public class AggConfigurationUtility + { + Microsoft.AnalysisServices.Tabular.Server server = new Microsoft.AnalysisServices.Tabular.Server(); + Microsoft.AnalysisServices.Tabular.Database database = new Microsoft.AnalysisServices.Tabular.Database(); + AggsConfiguration aggsConfig; + + [HelpHook, ArgShortcut("-?"), ArgDescription("Shows this help")] + public bool Help { get; set; } + + + /// + /// Validate the configuration file against the model before applying changes + /// + /// + private void ValidateConfigurationOfTable(Table tableConfig) + { + var table = database.Model.Tables.Find(tableConfig.Name); + + if (table == null) + throw new Exception($"Could not find table [{tableConfig.Name}]"); + + try + { + Enum.Parse(typeof(ModeType), tableConfig.Mode); + } + catch(Exception) + { + throw new Exception($"Table [{tableConfig.Name}] has invalid mode type {tableConfig.Mode}, must be one of Default, DirectQuery, Dual, or Import"); + } + + if (table.Partitions.Count == 0) + throw new Exception($"No partitions found for table [{table.Name}]"); + + if(tableConfig.AggregationRules != null) + foreach (AggregationRule rule in tableConfig.AggregationRules) + { + if(rule.Summarization != "CountTableRows") + try + { + Enum.Parse(typeof(SummarizationType), rule.Summarization); + } + catch (Exception) + { + throw new Exception($"Aggregation rule summarization invalid [{rule.Summarization}], must be one of GroupBy, Sum, Min, Max, Count, or CountTableRows"); + } + + Microsoft.AnalysisServices.Tabular.Column aggColumn = table.Columns.Find(rule.AggTableColumn); + + if (aggColumn == null) + throw new Exception($"Cound not find aggregation column [{table.Name}].[{rule.AggTableColumn}] in model"); + + var detailTable = database.Model.Tables.Find(rule.DetailTable); + + if (detailTable == null) + throw new Exception($"Cound not find detail table [{rule.DetailTable}] in model"); + + var detailColumn = (rule.DetailTableColumn == null ? null : detailTable.Columns.Find(rule.DetailTableColumn)); + + bool isCountAggregate = rule.Summarization != "Count" || rule.Summarization != "CountTableRows"; + + if (detailColumn == null && !isCountAggregate) + throw new Exception($"Cound not find detail column [{rule.DetailTable}].[{rule.DetailTableColumn}] in model"); + + if (!isCountAggregate && aggColumn.DataType != detailColumn.DataType) + throw new Exception($"Data type mismatch for aggregation column [{table.Name}].[{rule.AggTableColumn}] and detail column [{rule.DetailTable}].[{rule.DetailTableColumn}]"); + + } + + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine($"Validated aggregation rules for [{table.Name}], mode currently set to {table.Partitions[0].Mode.ToString()}"); + } + + /// + /// Applies the differences between the configuration file and the model + /// + /// + private int ApplyConfigurationOfTable(Table tableConfig) + { + // Update mode of each partition of the table if a difference is found between the model and the configuration + var table = database.Model.Tables.Find(tableConfig.Name); + int partitionModesChanged = 0; + table.Partitions.ForEach(p => + { + var mode = (ModeType)Enum.Parse(typeof(ModeType), tableConfig.Mode); + if (p.Mode != mode) + { + p.Mode = mode; + partitionModesChanged++; + } + } + ); + + // Remove all alternateOf definitions from the model that do not match an aggregation rule in the configuration + int alternateOfRemoved = 0; + table.Columns.ForEach(c => + { + int ruleMatch = 0; + + if(tableConfig.AggregationRules != null && c.AlternateOf != null) + ruleMatch = tableConfig.AggregationRules.Where(r => + r.Summarization != "CountTableRows" && + r.AggTableColumn == c.Name && + r.DetailTable == c.AlternateOf.BaseColumn.Table.Name && + r.DetailTableColumn == c.AlternateOf.BaseColumn.Name && + (SummarizationType)Enum.Parse(typeof(SummarizationType), r.Summarization) == c.AlternateOf.Summarization + ).Count() + + tableConfig.AggregationRules.Where(r => + r.Summarization == "CountTableRows" && + r.AggTableColumn == c.Name && + r.DetailTable == c.AlternateOf.BaseTable.Name && + c.AlternateOf.Summarization == SummarizationType.Count + ).Count(); + + if (ruleMatch == 0 && c.AlternateOf != null) + { + var baseObjectName = c.AlternateOf.BaseColumn == null ? + String.Format("[{0}]", c.AlternateOf.BaseTable.Name) : + String.Format("[{0}].[{1}]", c.AlternateOf.BaseColumn.Table.Name, c.AlternateOf.BaseColumn.Name); + + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine($"Removing aggregation rule from column [{c.Name}] with alternate of {baseObjectName} aggregation {c.AlternateOf.Summarization}"); + + c.AlternateOf = null; + alternateOfRemoved++; + } + } + ); + + // Add all alternateOf definitions from the configuration that do not match an alternateOf definition in the model + int alternateOfAdded = 0; + if(tableConfig.AggregationRules != null) + tableConfig.AggregationRules.ForEach(r => + { + var column = table.Columns.First(c => c.Name == r.AggTableColumn); + var detailTable = database.Model.Tables.Find(r.DetailTable); + var detailColumn = (r.DetailTableColumn != null) ? detailTable.Columns.Find(r.DetailTableColumn) : null; + + if (column.AlternateOf == null) + { + if (r.Summarization == "CountTableRows") + column.AlternateOf = new AlternateOf + { + Summarization = SummarizationType.Count, + BaseTable = detailTable + }; + else + column.AlternateOf = new AlternateOf + { + Summarization = (SummarizationType)Enum.Parse(typeof(SummarizationType), r.Summarization), + BaseColumn = detailColumn + }; + + alternateOfAdded++; + + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine($"Adding aggregation rule for column [{column.Name}] with alternate of [{detailTable.Name + (detailColumn == null ? string.Empty : "].[" + detailColumn.Name)}] aggregation {column.AlternateOf.Summarization}"); + } + } + ); + + return partitionModesChanged + alternateOfRemoved + alternateOfAdded; + } + + /// + /// Connect to analysis services instance and database, throw if error is encountered + /// + /// + private void Connect(string serverName) + { + //string connectionString = $"Provider=MSOLAP;Data Source={args.Server};"; + string connectionString = $"Provider=MSOLAP;Data Source={serverName};Integrated Security=SSPI;Persist Security Info=True;"; + server.Connect(connectionString); + + database = server.Databases.FindByName(aggsConfig.Database.Name); + + if (database == null) + { + throw new Microsoft.AnalysisServices.ConnectionException($"Could not find database [{aggsConfig.Database.Name}]"); + } + } + + [ArgActionMethod, ArgDescription("Applies the Aggs configuration to the model specified")] + public void Apply(ServerAndConfigurationArgs args) + { + List updatedTableCollection = new List(); + + // Read configuration file + aggsConfig = JsonHelper.ToClass(File.ReadAllText(args.ConfigFile)); + + #region Connect + + Connect(args.Server); + + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine($"Start: {DateTime.Now.ToString("hh:mm:ss tt")}"); + Console.WriteLine($"Server: {args.Server}"); + Console.WriteLine($"Database: {aggsConfig.Database.Name}"); + + #endregion + + #region Validate Configuration Against Model + + aggsConfig.Database.Tables.ForEach(x => ValidateConfigurationOfTable(x)); + + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"Validation successful"); + + #endregion + + #region Update Model Compatibility + + //Set database compat level + if (database.CompatibilityLevel < 1465) + { + database.CompatibilityLevel = 1465; + database.Update(); + } + + #endregion + + #region Apply Model Changes + + var changesApplied = 0; + aggsConfig.Database.Tables.ForEach(x => + { + + var delta = ApplyConfigurationOfTable(x); + + if (delta > 0) + updatedTableCollection.Add(database.Model.Tables.Find(x.Name)); + + changesApplied += delta; + } + ); + + if (changesApplied == 0) + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine($"No changes applied to model"); + } + else + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"Applied model changes"); + } + + #endregion + + #region Expand Full + + if (changesApplied == 0) + { + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Skipping write to database, no changes detected"); + } + else + { + // Set database UpdateOptions to ExpandFull + try + { + Console.ForegroundColor = ConsoleColor.White; + Console.Write("Writing model changes to database "); + database.Update(Microsoft.AnalysisServices.UpdateOptions.ExpandFull); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("SUCCESS"); + } + catch (Exception e) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("FAILED"); + + throw e; + } + } + + #endregion + + #region Refresh Tables as Required + + if (changesApplied == 0) + { + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Skipping table refresh, no changes detected"); + } + else + { + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Refreshing tables - begin: " + DateTime.Now.ToString("hh:mm:ss tt")); + + foreach (var tableObj in updatedTableCollection) + { + Console.ForegroundColor = ConsoleColor.White; + Console.Write($"Refreshing table [{tableObj.Name}] "); + tableObj.RequestRefresh(RefreshType.Full); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("COMPLETE"); + } + + database.Model.SaveChanges(); + + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Refreshing tables - end: " + DateTime.Now.ToString("hh:mm:ss tt")); + } + + #endregion + } + } + + public class ServerAndConfigurationArgs + { + [ArgRequired, ArgDescription("The URL to the Azure Analysis Services instance e.g.: asazure://host/instance"), ArgPosition(1)] + public string Server { get; set; } + + [ArgRequired, ArgDescription("The file path to the JSON configuration file to apply to the database"), ArgPosition(2)] + public string ConfigFile { get; set; } + } + + #endregion + + class Program + { + static void Main(string[] args) + { + try + { + Args.InvokeAction(args); + } + catch (Exception exc) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(""); + Console.WriteLine($"Exception occurred: {DateTime.Now.ToString("hh:mm:ss tt")}"); + Console.WriteLine($"Exception message: {exc.Message}"); + } + finally + { + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Press any key to exit"); + Console.ReadKey(); + } + } + } +} diff --git a/SetUpAggs/Properties/AssemblyInfo.cs b/SetUpAggs/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2475a60 --- /dev/null +++ b/SetUpAggs/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SetUpAggs")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SetUpAggs")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2433edbd-ffb1-42b9-a0bf-2dfc2953acf1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SetUpAggs/SetUpAggs.csproj b/SetUpAggs/SetUpAggs.csproj new file mode 100644 index 0000000..d6819e0 --- /dev/null +++ b/SetUpAggs/SetUpAggs.csproj @@ -0,0 +1,74 @@ + + + + + Debug + AnyCPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1} + Exe + SetUpAggs + SetUpAggs + v4.6.1 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\Microsoft.AnalysisServices.retail.amd64.15.8.0\lib\net45\Microsoft.AnalysisServices.dll + + + packages\Microsoft.AnalysisServices.retail.amd64.15.8.0\lib\net45\Microsoft.AnalysisServices.Core.dll + + + packages\Microsoft.AnalysisServices.retail.amd64.15.8.0\lib\net45\Microsoft.AnalysisServices.SPClient.Interfaces.dll + + + packages\Microsoft.AnalysisServices.retail.amd64.15.8.0\lib\net45\Microsoft.AnalysisServices.Tabular.dll + + + packages\Microsoft.AnalysisServices.retail.amd64.15.8.0\lib\net45\Microsoft.AnalysisServices.Tabular.Json.dll + + + packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll + + + packages\PowerArgs.3.5.0\lib\netstandard2.0\PowerArgs.dll + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SetUpAggs/SetUpAggs.sln b/SetUpAggs/SetUpAggs.sln new file mode 100644 index 0000000..eac324f --- /dev/null +++ b/SetUpAggs/SetUpAggs.sln @@ -0,0 +1,73 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2026 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SetUpAggs", "SetUpAggs.csproj", "{2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}" +EndProject +Project("{6870E480-7721-4708-BFB8-9AE898AA21B3}") = "AdventureWorksAggs", "AW Internet Sales\AdventureWorksAggs.smproj", "{8CE414BB-95B2-4C99-9E03-51BA72086E22}" +EndProject +Project("{6870E480-7721-4708-BFB8-9AE898AA21B3}") = "AdventureWorksAggsProvider", "AdventureWorksAggsProvider\AdventureWorksAggsProvider.smproj", "{274B7B29-6EAE-44CE-A06B-ED91F1E52734}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Development|Any CPU = Development|Any CPU + Development|x86 = Development|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Debug|x86.ActiveCfg = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Debug|x86.Build.0 = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Development|Any CPU.Build.0 = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Development|x86.ActiveCfg = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Development|x86.Build.0 = Debug|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Release|Any CPU.Build.0 = Release|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Release|x86.ActiveCfg = Release|Any CPU + {2433EDBD-FFB1-42B9-A0BF-2DFC2953ACF1}.Release|x86.Build.0 = Release|Any CPU + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Debug|Any CPU.ActiveCfg = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Debug|Any CPU.Build.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Debug|Any CPU.Deploy.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Debug|x86.ActiveCfg = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Debug|x86.Build.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Debug|x86.Deploy.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Development|Any CPU.ActiveCfg = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Development|x86.ActiveCfg = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Development|x86.Build.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Development|x86.Deploy.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Release|Any CPU.ActiveCfg = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Release|Any CPU.Build.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Release|Any CPU.Deploy.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Release|x86.ActiveCfg = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Release|x86.Build.0 = Development|x86 + {8CE414BB-95B2-4C99-9E03-51BA72086E22}.Release|x86.Deploy.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Debug|Any CPU.ActiveCfg = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Debug|Any CPU.Build.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Debug|Any CPU.Deploy.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Debug|x86.ActiveCfg = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Debug|x86.Build.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Debug|x86.Deploy.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Development|Any CPU.ActiveCfg = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Development|x86.ActiveCfg = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Development|x86.Build.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Development|x86.Deploy.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Release|Any CPU.ActiveCfg = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Release|Any CPU.Build.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Release|Any CPU.Deploy.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Release|x86.ActiveCfg = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Release|x86.Build.0 = Development|x86 + {274B7B29-6EAE-44CE-A06B-ED91F1E52734}.Release|x86.Deploy.0 = Development|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6C6322A8-7B54-4A88-88DA-24C189C35847} + EndGlobalSection +EndGlobal diff --git a/SetUpAggs/packages.config b/SetUpAggs/packages.config new file mode 100644 index 0000000..919d42e --- /dev/null +++ b/SetUpAggs/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file