diff --git a/AsPartitionProcessing/AdventureWorksDW.bak b/AsPartitionProcessing/AdventureWorksDW.bak
deleted file mode 100644
index 34cc4c6..0000000
Binary files a/AsPartitionProcessing/AdventureWorksDW.bak and /dev/null differ
diff --git a/AsPartitionProcessing/AsPartitionProcessing.AdventureWorks/AsPartitionProcessing.AdventureWorks.smproj b/AsPartitionProcessing/AsPartitionProcessing.AdventureWorks/AsPartitionProcessing.AdventureWorks.smproj
deleted file mode 100644
index d26bf54..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.AdventureWorks/AsPartitionProcessing.AdventureWorks.smproj
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- Development
- 2.0
- {7274efcc-e7df-40ad-83df-1dfd5b954e67}
- Exe
- MyRootNamespace
- MyAssemblyName
- false
- bin\
- AsPartitionProcessing.AdventureWorks
- localhost
- Developer
- Version_11_0
- AW Tabular Model SQL 2014
- Model
- Default
- False
- InMemory
- Default
-
-
- bin\
- localhost
- Developer
- Version_11_0
- AdventureWorks
- Model
- Default
- False
- InMemory
- Default
-
-
-
-
- Code
-
-
-
-
\ No newline at end of file
diff --git a/AsPartitionProcessing/AsPartitionProcessing.AdventureWorks/Model.bim b/AsPartitionProcessing/AsPartitionProcessing.AdventureWorks/Model.bim
deleted file mode 100644
index cf4cd59..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.AdventureWorks/Model.bim
+++ /dev/null
@@ -1,6009 +0,0 @@
-{
- "name": "SemanticModel",
- "id": "SemanticModel",
- "compatibilityLevel": 1200,
- "model": {
- "culture": "en-US",
- "dataSources": [
- {
- "name": "AdventureWorksDW",
- "connectionString": "Provider=SQLNCLI11;Data Source=localhost;Integrated Security=SSPI;Persist Security Info=false;Initial Catalog=AdventureWorksDW",
- "impersonationMode": "impersonateServiceAccount",
- "annotations": [
- {
- "name": "ConnectionEditUISource",
- "value": "SqlServer"
- }
- ]
- }
- ],
- "tables": [
- {
- "name": "Customer",
- "columns": [
- {
- "name": "Customer Id",
- "dataType": "string",
- "sourceColumn": "CustomerAlternateKey"
- },
- {
- "name": "Title",
- "dataType": "string",
- "sourceColumn": "Title"
- },
- {
- "name": "First Name",
- "dataType": "string",
- "sourceColumn": "FirstName"
- },
- {
- "name": "Middle Name",
- "dataType": "string",
- "sourceColumn": "MiddleName"
- },
- {
- "name": "Last Name",
- "dataType": "string",
- "sourceColumn": "LastName"
- },
- {
- "name": "Name Style",
- "dataType": "boolean",
- "sourceColumn": "NameStyle"
- },
- {
- "name": "Birth Date",
- "dataType": "dateTime",
- "sourceColumn": "BirthDate"
- },
- {
- "name": "Marital Status",
- "dataType": "string",
- "sourceColumn": "MaritalStatus"
- },
- {
- "name": "Suffix",
- "dataType": "string",
- "sourceColumn": "Suffix"
- },
- {
- "name": "Gender",
- "dataType": "string",
- "sourceColumn": "Gender"
- },
- {
- "name": "Email Address",
- "dataType": "string",
- "sourceColumn": "EmailAddress"
- },
- {
- "name": "Yearly Income",
- "dataType": "decimal",
- "sourceColumn": "YearlyIncome",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Children",
- "dataType": "int64",
- "sourceColumn": "TotalChildren",
- "summarizeBy": "none"
- },
- {
- "name": "Number of Children At Home",
- "dataType": "int64",
- "sourceColumn": "NumberChildrenAtHome",
- "summarizeBy": "none"
- },
- {
- "name": "Education",
- "dataType": "string",
- "sourceColumn": "EnglishEducation"
- },
- {
- "name": "Occupation",
- "dataType": "string",
- "sourceColumn": "EnglishOccupation"
- },
- {
- "name": "Owns House",
- "dataType": "boolean",
- "sourceColumn": "HouseOwnerFlag",
- "formatString": "\"TRUE\";\"TRUE\";\"FALSE\""
- },
- {
- "name": "Address Line 1",
- "dataType": "string",
- "sourceColumn": "AddressLine1"
- },
- {
- "name": "Address Line 2",
- "dataType": "string",
- "sourceColumn": "AddressLine2"
- },
- {
- "name": "Date Of First Purchase",
- "dataType": "dateTime",
- "sourceColumn": "DateFirstPurchase"
- },
- {
- "name": "Commute Distance",
- "dataType": "string",
- "sourceColumn": "CommuteDistance"
- },
- {
- "name": "CustomerKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "CustomerKey"
- },
- {
- "name": "GeographyKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "GeographyKey"
- },
- {
- "name": "Total Cars Owned",
- "dataType": "int64",
- "sourceColumn": "NumberCarsOwned",
- "summarizeBy": "none"
- },
- {
- "name": "Phone",
- "dataType": "string",
- "sourceColumn": "Phone"
- }
- ],
- "partitions": [
- {
- "name": "Customer",
- "source": {
- "query": "SELECT [dbo].[DimCustomer].* \t\tFROM [dbo].[DimCustomer]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimCustomer"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimCustomer].* FROM [dbo].[DimCustomer] "
- }
- ]
- },
- {
- "name": "Date",
- "dataCategory": "Time",
- "columns": [
- {
- "name": "Date",
- "dataType": "dateTime",
- "isKey": true,
- "sourceColumn": "FullDateAlternateKey"
- },
- {
- "name": "Day Number Of Week",
- "dataType": "int64",
- "sourceColumn": "DayNumberOfWeek",
- "summarizeBy": "none"
- },
- {
- "name": "Day Of Month",
- "dataType": "int64",
- "sourceColumn": "DayNumberOfMonth",
- "summarizeBy": "none"
- },
- {
- "name": "Day Of Year",
- "dataType": "int64",
- "sourceColumn": "DayNumberOfYear",
- "summarizeBy": "none"
- },
- {
- "name": "Month Name",
- "dataType": "string",
- "sourceColumn": "EnglishMonthName",
- "sortByColumn": "Month"
- },
- {
- "name": "Month",
- "dataType": "int64",
- "sourceColumn": "MonthNumberOfYear",
- "summarizeBy": "none"
- },
- {
- "name": "Calendar Quarter",
- "dataType": "int64",
- "sourceColumn": "CalendarQuarter",
- "summarizeBy": "none"
- },
- {
- "name": "Calendar Year",
- "dataType": "int64",
- "sourceColumn": "CalendarYear",
- "summarizeBy": "none"
- },
- {
- "name": "Calendar Semester",
- "dataType": "int64",
- "sourceColumn": "CalendarSemester",
- "summarizeBy": "none"
- },
- {
- "name": "Fiscal Quarter",
- "dataType": "int64",
- "sourceColumn": "FiscalQuarter",
- "summarizeBy": "none"
- },
- {
- "name": "Fiscal Year",
- "dataType": "int64",
- "sourceColumn": "FiscalYear",
- "summarizeBy": "none"
- },
- {
- "name": "Fiscal Semester",
- "dataType": "int64",
- "sourceColumn": "FiscalSemester",
- "summarizeBy": "none"
- },
- {
- "name": "DateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "DateKey",
- "summarizeBy": "none"
- },
- {
- "name": "Day Name Of Week",
- "dataType": "string",
- "sourceColumn": "EnglishDayNameOfWeek",
- "sortByColumn": "Day Number Of Week"
- },
- {
- "name": "Week Of Year",
- "dataType": "int64",
- "sourceColumn": "WeekNumberOfYear",
- "summarizeBy": "none"
- }
- ],
- "partitions": [
- {
- "name": "Date",
- "source": {
- "query": "SELECT [dbo].[DimDate].* \t\tFROM [dbo].[DimDate]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- }
- ],
- "measures": [
- {
- "name": "Days In Current Quarter",
- "expression": "COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))"
- },
- {
- "name": "Days In Current Quarter to Date",
- "expression": "COUNTROWS( DATESQTD( 'Date'[Date]))"
- }
- ],
- "hierarchies": [
- {
- "name": "Calendar",
- "levels": [
- {
- "name": "Year",
- "ordinal": 0,
- "column": "Calendar Year"
- },
- {
- "name": "Semester",
- "ordinal": 1,
- "column": "Calendar Semester"
- },
- {
- "name": "Quarter",
- "ordinal": 2,
- "column": "Calendar Quarter"
- },
- {
- "name": "Month",
- "ordinal": 3,
- "column": "Month Name"
- },
- {
- "name": "Day",
- "ordinal": 4,
- "column": "Day Of Month"
- }
- ]
- },
- {
- "name": "Fiscal",
- "levels": [
- {
- "name": "Month",
- "ordinal": 3,
- "column": "Month Name"
- },
- {
- "name": "Day",
- "ordinal": 4,
- "column": "Day Of Month"
- },
- {
- "name": "Fiscal Year",
- "ordinal": 0,
- "column": "Fiscal Year"
- },
- {
- "name": "Fiscal Semester",
- "ordinal": 1,
- "column": "Fiscal Semester"
- },
- {
- "name": "Fiscal Quarter",
- "ordinal": 2,
- "column": "Fiscal Quarter"
- }
- ]
- },
- {
- "name": "Production Calendar",
- "levels": [
- {
- "name": "Year",
- "ordinal": 0,
- "column": "Calendar Year"
- },
- {
- "name": "Week",
- "ordinal": 1,
- "column": "Week Of Year"
- },
- {
- "name": "Week Day",
- "ordinal": 2,
- "column": "Day Name Of Week"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimDate"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimDate].* FROM [dbo].[DimDate] "
- }
- ]
- },
- {
- "name": "Geography",
- "columns": [
- {
- "name": "City",
- "dataType": "string",
- "sourceColumn": "City"
- },
- {
- "name": "State Province Code",
- "dataType": "string",
- "sourceColumn": "StateProvinceCode"
- },
- {
- "name": "State Province Name",
- "dataType": "string",
- "sourceColumn": "StateProvinceName"
- },
- {
- "name": "Country Region Code",
- "dataType": "string",
- "sourceColumn": "CountryRegionCode"
- },
- {
- "name": "Country Region Name",
- "dataType": "string",
- "sourceColumn": "EnglishCountryRegionName"
- },
- {
- "name": "Postal Code",
- "dataType": "string",
- "sourceColumn": "PostalCode"
- },
- {
- "name": "GeographyKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "GeographyKey"
- },
- {
- "name": "SalesTerritoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "SalesTerritoryKey"
- }
- ],
- "partitions": [
- {
- "name": "Geography",
- "source": {
- "query": "SELECT [dbo].[DimGeography].* \t\tFROM [dbo].[DimGeography]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- }
- ],
- "hierarchies": [
- {
- "name": "Geography",
- "levels": [
- {
- "name": "Country Region",
- "ordinal": 0,
- "column": "Country Region Name"
- },
- {
- "name": "State Province",
- "ordinal": 1,
- "column": "State Province Name"
- },
- {
- "name": "City",
- "ordinal": 2,
- "column": "City"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimGeography"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimGeography].* FROM [dbo].[DimGeography] "
- }
- ]
- },
- {
- "name": "Product",
- "columns": [
- {
- "name": "Product Id",
- "dataType": "string",
- "sourceColumn": "ProductAlternateKey"
- },
- {
- "name": "Weight Unit Code",
- "dataType": "string",
- "sourceColumn": "WeightUnitMeasureCode"
- },
- {
- "name": "Size Unit Code",
- "dataType": "string",
- "sourceColumn": "SizeUnitMeasureCode"
- },
- {
- "name": "Product Name",
- "dataType": "string",
- "sourceColumn": "EnglishProductName",
- "isDefaultLabel": true
- },
- {
- "name": "Standard Cost",
- "dataType": "decimal",
- "sourceColumn": "StandardCost",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Color",
- "dataType": "string",
- "sourceColumn": "Color"
- },
- {
- "name": "Safety Stock Level",
- "dataType": "int64",
- "sourceColumn": "SafetyStockLevel",
- "summarizeBy": "none"
- },
- {
- "name": "Reorder Point",
- "dataType": "int64",
- "sourceColumn": "ReorderPoint",
- "summarizeBy": "none"
- },
- {
- "name": "List Price",
- "dataType": "decimal",
- "sourceColumn": "ListPrice",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Size",
- "dataType": "string",
- "sourceColumn": "Size"
- },
- {
- "name": "Size Range",
- "dataType": "string",
- "sourceColumn": "SizeRange"
- },
- {
- "name": "Weight",
- "dataType": "double",
- "sourceColumn": "Weight",
- "summarizeBy": "none"
- },
- {
- "name": "Days To Manufacture",
- "dataType": "int64",
- "sourceColumn": "DaysToManufacture"
- },
- {
- "name": "Product Line",
- "dataType": "string",
- "sourceColumn": "ProductLine"
- },
- {
- "name": "Dealer Price",
- "dataType": "decimal",
- "sourceColumn": "DealerPrice",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Class",
- "dataType": "string",
- "sourceColumn": "Class"
- },
- {
- "name": "Style",
- "dataType": "string",
- "sourceColumn": "Style"
- },
- {
- "name": "Model Name",
- "dataType": "string",
- "sourceColumn": "ModelName"
- },
- {
- "name": "Description",
- "dataType": "string",
- "sourceColumn": "EnglishDescription"
- },
- {
- "name": "Product Start Date",
- "dataType": "dateTime",
- "sourceColumn": "StartDate"
- },
- {
- "name": "Product End Date",
- "dataType": "dateTime",
- "sourceColumn": "EndDate"
- },
- {
- "name": "Product Status",
- "dataType": "string",
- "sourceColumn": "Status"
- },
- {
- "type": "calculated",
- "name": "Product SubCategory Name",
- "dataType": "string",
- "isDataTypeInferred": true,
- "expression": "RELATED('Product SubCategory'[Product Subcategory Name])"
- },
- {
- "type": "calculated",
- "name": "Product Category Name",
- "dataType": "string",
- "isDataTypeInferred": true,
- "expression": "RELATED('Product Category'[Product Category Name])"
- },
- {
- "name": "ProductKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductKey"
- },
- {
- "name": "ProductSubcategoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductSubcategoryKey"
- },
- {
- "name": "Is Finished Goods",
- "dataType": "boolean",
- "sourceColumn": "FinishedGoodsFlag"
- },
- {
- "name": "LargePhoto",
- "dataType": "binary",
- "sourceColumn": "LargePhoto",
- "isDefaultImage": true
- }
- ],
- "partitions": [
- {
- "name": "Product",
- "source": {
- "query": "SELECT [dbo].[DimProduct].* \t\tFROM [dbo].[DimProduct]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- }
- ],
- "hierarchies": [
- {
- "name": "Category",
- "levels": [
- {
- "name": "Category",
- "ordinal": 0,
- "column": "Product Category Name"
- },
- {
- "name": "SubCategory",
- "ordinal": 1,
- "column": "Product SubCategory Name"
- },
- {
- "name": "Model",
- "ordinal": 2,
- "column": "Model Name"
- },
- {
- "name": "Product",
- "ordinal": 3,
- "column": "Product Name"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimProduct"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimProduct].* FROM [dbo].[DimProduct] "
- }
- ]
- },
- {
- "name": "Product Category",
- "columns": [
- {
- "name": "Product Category Name",
- "dataType": "string",
- "sourceColumn": "EnglishProductCategoryName"
- },
- {
- "name": "ProductCategoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductCategoryKey",
- "summarizeBy": "none"
- }
- ],
- "partitions": [
- {
- "name": "Product Category",
- "source": {
- "query": "SELECT [dbo].[DimProductCategory].* \t\tFROM [dbo].[DimProductCategory]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimProductCategory"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimProductCategory].* FROM [dbo].[DimProductCategory] "
- }
- ]
- },
- {
- "name": "Product Subcategory",
- "columns": [
- {
- "name": "Product Subcategory Name",
- "dataType": "string",
- "sourceColumn": "EnglishProductSubcategoryName"
- },
- {
- "name": "ProductSubcategoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductSubcategoryKey",
- "summarizeBy": "none"
- },
- {
- "name": "ProductCategoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductCategoryKey",
- "summarizeBy": "none"
- }
- ],
- "partitions": [
- {
- "name": "Product Subcategory",
- "source": {
- "query": "SELECT [dbo].[DimProductSubcategory].* \t\tFROM [dbo].[DimProductSubcategory]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimProductSubcategory"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimProductSubcategory].* FROM [dbo].[DimProductSubcategory] "
- }
- ]
- },
- {
- "name": "Currency",
- "columns": [
- {
- "name": "CurrencyKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "CurrencyKey"
- },
- {
- "name": "Currency Code",
- "dataType": "string",
- "sourceColumn": "CurrencyAlternateKey"
- },
- {
- "name": "CurrencyName",
- "dataType": "string",
- "sourceColumn": "CurrencyName"
- }
- ],
- "partitions": [
- {
- "name": "Currency",
- "source": {
- "query": "SELECT [dbo].[DimCurrency].* \t\tFROM [dbo].[DimCurrency]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "QueryEditorSerialization"
- },
- {
- "name": "TableWidgetSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimCurrency"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimCurrency].* FROM [dbo].[DimCurrency] "
- }
- ]
- },
- {
- "name": "Employee",
- "columns": [
- {
- "name": "EmployeeKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "EmployeeKey",
- "summarizeBy": "none"
- },
- {
- "name": "ParentEmployeeKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ParentEmployeeKey",
- "summarizeBy": "none"
- },
- {
- "name": "Employee Id",
- "dataType": "string",
- "sourceColumn": "EmployeeNationalIDAlternateKey"
- },
- {
- "name": "SalesTerritoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "SalesTerritoryKey"
- },
- {
- "name": "First Name",
- "dataType": "string",
- "sourceColumn": "FirstName"
- },
- {
- "name": "Last Name",
- "dataType": "string",
- "sourceColumn": "LastName"
- },
- {
- "name": "Middle Name",
- "dataType": "string",
- "sourceColumn": "MiddleName"
- },
- {
- "name": "NameStyle",
- "dataType": "boolean",
- "sourceColumn": "NameStyle"
- },
- {
- "name": "Title",
- "dataType": "string",
- "sourceColumn": "Title"
- },
- {
- "name": "Hire Date",
- "dataType": "dateTime",
- "sourceColumn": "HireDate"
- },
- {
- "name": "Birth Date",
- "dataType": "dateTime",
- "sourceColumn": "BirthDate"
- },
- {
- "name": "Login",
- "dataType": "string",
- "sourceColumn": "LoginID"
- },
- {
- "name": "Email",
- "dataType": "string",
- "sourceColumn": "EmailAddress"
- },
- {
- "name": "Phone",
- "dataType": "string",
- "sourceColumn": "Phone"
- },
- {
- "name": "Marital Status",
- "dataType": "string",
- "sourceColumn": "MaritalStatus"
- },
- {
- "name": "Emergency Contact Name",
- "dataType": "string",
- "sourceColumn": "EmergencyContactName"
- },
- {
- "name": "Emergency Contact Phone",
- "dataType": "string",
- "sourceColumn": "EmergencyContactPhone"
- },
- {
- "name": "Is Salaried",
- "dataType": "boolean",
- "sourceColumn": "SalariedFlag"
- },
- {
- "name": "Gender",
- "dataType": "string",
- "sourceColumn": "Gender"
- },
- {
- "name": "Pay Frequency",
- "dataType": "int64",
- "sourceColumn": "PayFrequency",
- "summarizeBy": "none"
- },
- {
- "name": "Base Rate",
- "dataType": "decimal",
- "sourceColumn": "BaseRate",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Vacation Hours",
- "dataType": "int64",
- "sourceColumn": "VacationHours",
- "summarizeBy": "none"
- },
- {
- "name": "Sick Leave Hours",
- "dataType": "int64",
- "sourceColumn": "SickLeaveHours",
- "summarizeBy": "none"
- },
- {
- "name": "Is Current",
- "dataType": "boolean",
- "sourceColumn": "CurrentFlag"
- },
- {
- "name": "Is Sales Person",
- "dataType": "boolean",
- "sourceColumn": "SalesPersonFlag"
- },
- {
- "name": "Department Name",
- "dataType": "string",
- "sourceColumn": "DepartmentName"
- },
- {
- "name": "Start Date",
- "dataType": "dateTime",
- "sourceColumn": "StartDate"
- },
- {
- "name": "End Date",
- "dataType": "dateTime",
- "sourceColumn": "EndDate"
- },
- {
- "name": "Status",
- "dataType": "string",
- "sourceColumn": "Status"
- },
- {
- "name": "Employee Photo",
- "dataType": "binary",
- "sourceColumn": "EmployeePhoto",
- "isDefaultImage": true
- }
- ],
- "partitions": [
- {
- "name": "Employee",
- "source": {
- "query": "SELECT [dbo].[DimEmployee].* \t\tFROM [dbo].[DimEmployee]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "QueryEditorSerialization"
- },
- {
- "name": "TableWidgetSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimEmployee"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimEmployee].* FROM [dbo].[DimEmployee] "
- }
- ]
- },
- {
- "name": "Promotion",
- "columns": [
- {
- "name": "PromotionKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "PromotionKey",
- "summarizeBy": "none"
- },
- {
- "name": "Promotion Name",
- "dataType": "string",
- "sourceColumn": "EnglishPromotionName"
- },
- {
- "name": "DiscountPct",
- "dataType": "double",
- "sourceColumn": "DiscountPct",
- "formatString": "0.00",
- "summarizeBy": "none"
- },
- {
- "name": "Promotion Type",
- "dataType": "string",
- "sourceColumn": "EnglishPromotionType"
- },
- {
- "name": "Promotion Category",
- "dataType": "string",
- "sourceColumn": "EnglishPromotionCategory"
- },
- {
- "name": "Promotion Start Date",
- "dataType": "dateTime",
- "sourceColumn": "StartDate"
- },
- {
- "name": "Promotion End Date",
- "dataType": "dateTime",
- "sourceColumn": "EndDate"
- },
- {
- "name": "Min Quantity",
- "dataType": "int64",
- "sourceColumn": "MinQty"
- },
- {
- "name": "Max Quantity",
- "dataType": "int64",
- "sourceColumn": "MaxQty"
- }
- ],
- "partitions": [
- {
- "name": "Promotion",
- "source": {
- "query": "SELECT [dbo].[DimPromotion].* \t\tFROM [dbo].[DimPromotion]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "QueryEditorSerialization"
- },
- {
- "name": "TableWidgetSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimPromotion"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimPromotion].* FROM [dbo].[DimPromotion] "
- }
- ]
- },
- {
- "name": "Reseller",
- "columns": [
- {
- "name": "ResellerKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ResellerKey"
- },
- {
- "name": "GeographyKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "GeographyKey"
- },
- {
- "name": "Reseller Id",
- "dataType": "string",
- "sourceColumn": "ResellerAlternateKey"
- },
- {
- "name": "Reseller Phone",
- "dataType": "string",
- "sourceColumn": "Phone"
- },
- {
- "name": "Business Type",
- "dataType": "string",
- "sourceColumn": "BusinessType"
- },
- {
- "name": "Reseller Name",
- "dataType": "string",
- "sourceColumn": "ResellerName",
- "isDefaultLabel": true
- },
- {
- "name": "Number Employees",
- "dataType": "int64",
- "sourceColumn": "NumberEmployees",
- "summarizeBy": "none"
- },
- {
- "name": "Order Frequency",
- "dataType": "string",
- "sourceColumn": "OrderFrequency"
- },
- {
- "name": "Order Month",
- "dataType": "int64",
- "sourceColumn": "OrderMonth"
- },
- {
- "name": "First Order Year",
- "dataType": "int64",
- "sourceColumn": "FirstOrderYear",
- "summarizeBy": "none"
- },
- {
- "name": "Last Order Year",
- "dataType": "int64",
- "sourceColumn": "LastOrderYear",
- "summarizeBy": "none"
- },
- {
- "name": "Product Line",
- "dataType": "string",
- "sourceColumn": "ProductLine"
- },
- {
- "name": "Address Line 1",
- "dataType": "string",
- "sourceColumn": "AddressLine1"
- },
- {
- "name": "Address Line 2",
- "dataType": "string",
- "sourceColumn": "AddressLine2"
- },
- {
- "name": "Annual Sales",
- "dataType": "decimal",
- "sourceColumn": "AnnualSales",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Bank Name",
- "dataType": "string",
- "sourceColumn": "BankName"
- },
- {
- "name": "Min Payment Type",
- "dataType": "int64",
- "sourceColumn": "MinPaymentType",
- "summarizeBy": "none"
- },
- {
- "name": "Min Payment Amount",
- "dataType": "decimal",
- "sourceColumn": "MinPaymentAmount",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Annua Revenue",
- "dataType": "decimal",
- "sourceColumn": "AnnualRevenue",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Year Opened",
- "dataType": "int64",
- "sourceColumn": "YearOpened",
- "summarizeBy": "none"
- }
- ],
- "partitions": [
- {
- "name": "Reseller",
- "source": {
- "query": "SELECT [dbo].[DimReseller].* \t\tFROM [dbo].[DimReseller]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "QueryEditorSerialization"
- },
- {
- "name": "TableWidgetSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimReseller"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimReseller].* FROM [dbo].[DimReseller] "
- }
- ]
- },
- {
- "name": "Sales Territory",
- "columns": [
- {
- "name": "SalesTerritoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "SalesTerritoryKey"
- },
- {
- "name": "Sales Territory Region",
- "dataType": "string",
- "sourceColumn": "SalesTerritoryRegion",
- "isDefaultLabel": true
- },
- {
- "name": "Sales Territory Country",
- "dataType": "string",
- "sourceColumn": "SalesTerritoryCountry"
- },
- {
- "name": "Sales Territory Group",
- "dataType": "string",
- "sourceColumn": "SalesTerritoryGroup"
- },
- {
- "name": "Sales Territory Image",
- "dataType": "binary",
- "sourceColumn": "SalesTerritoryImage",
- "isDefaultImage": true
- }
- ],
- "partitions": [
- {
- "name": "Sales Territory",
- "source": {
- "query": "SELECT [dbo].[DimSalesTerritory].* \t\tFROM [dbo].[DimSalesTerritory]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "QueryEditorSerialization"
- },
- {
- "name": "TableWidgetSerialization"
- }
- ]
- }
- ],
- "measures": [
- {
- "name": "Distinct Count Sales Orders",
- "expression": "[Reseller Distinct Count Sales Order] + [Internet Distinct Count Sales Order]",
- "formatString": "#,0"
- },
- {
- "name": "Total Sales",
- "expression": "[Reseller Total Sales] + [Internet Total Sales]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Discount Amount",
- "expression": "[Reseller Total Discount Amount] + [Internet Total Discount Amount]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Products Cost",
- "expression": "[Reseller Total Product Cost] + [Internet Total Product Cost]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Tax Amount",
- "expression": "[Reseller Total Tax Amount] + [Internet Total Tax Amount]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Freight",
- "expression": "[Reseller Total Freight] + [Internet Total Freight]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Gross Profit",
- "expression": "[Reseller Total Gross Profit] + [Internet Total Gross Profit]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Units Sold",
- "expression": "[Reseller Total Units] + [Internet Total Units]",
- "formatString": "#,0"
- },
- {
- "name": "Order Lines Count",
- "expression": "[Reseller Order Lines Count] + [Internet Order Lines Count]",
- "formatString": "#,0"
- },
- {
- "name": "Total Previous Quarter Gross Profit",
- "expression": "CALCULATE([Total Gross Profit], PREVIOUSQUARTER('Date'[Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Current Quarter Gross Profit",
- "expression": "TOTALQTD([Total Gross Profit],'Date'[Date])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Previous Quarter Gross Profit Proportion to QTD",
- "expression": "[Total Previous Quarter Gross Profit]*([Days In Current Quarter to Date]/[Days In Current Quarter])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Previous Quarter Sales",
- "expression": "CALCULATE([Total Sales], PREVIOUSQUARTER('Date'[Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Current Quarter Sales",
- "expression": "TOTALQTD([Total Sales],'Date'[Date])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Previous Quarter Sales Proportion to QTD",
- "expression": "[Total Previous Quarter Sales]*([Days In Current Quarter to Date]/[Days In Current Quarter])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Sales - Sales Territory sliced by Employee",
- "expression": "[Reseller Total Sales - Sales Territory sliced by Employee] + [Internet Total Sales]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Current Quarter Sales Performance",
- "expression": "IFERROR([Total Current Quarter Sales]/[Total Previous Quarter Sales Proportion to QTD],BLANK())",
- "kpi": {
- "targetExpression": "1.1",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Sales Territory'[Total Current Quarter Sales Performance]),BLANK(),",
- " If('Sales Territory'[Total Current Quarter Sales Performance]<0.8,-1,",
- "\t If('Sales Territory'[Total Current Quarter Sales Performance]<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": "0.8"
- },
- {
- "name": "KpiThreshold_1",
- "value": "1.07"
- }
- ]
- }
- },
- {
- "name": "Total Current Quarter Gross Profit Performance",
- "expression": "IF([Total Previous Quarter Gross Profit Proportion to QTD]<>0,([Total Current Quarter Gross Profit]-[Total Previous Quarter Gross Profit Proportion to QTD])/[Total Previous Quarter Gross Profit Proportion to QTD],BLANK())",
- "kpi": {
- "targetExpression": "1.25",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Sales Territory'[Total Current Quarter Gross Profit Performance]),BLANK(),",
- " If('Sales Territory'[Total Current Quarter Gross Profit Performance]<0.8,-1,",
- "\t If('Sales Territory'[Total Current Quarter Gross Profit Performance]<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"
- }
- ]
- }
- }
- ],
- "hierarchies": [
- {
- "name": "Territory",
- "levels": [
- {
- "name": "Group",
- "ordinal": 0,
- "column": "Sales Territory Group"
- },
- {
- "name": "Country",
- "ordinal": 1,
- "column": "Sales Territory Country"
- },
- {
- "name": "Region",
- "ordinal": 2,
- "column": "Sales Territory Region"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "DimSalesTerritory"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[DimSalesTerritory].* FROM [dbo].[DimSalesTerritory] "
- }
- ]
- },
- {
- "name": "Product Inventory",
- "columns": [
- {
- "name": "ProductKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductKey"
- },
- {
- "name": "DateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "DateKey"
- },
- {
- "name": "Movement Date",
- "dataType": "dateTime",
- "sourceColumn": "MovementDate",
- "formatString": "Short Date",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Unit Cost",
- "dataType": "decimal",
- "sourceColumn": "UnitCost",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Units In",
- "dataType": "int64",
- "sourceColumn": "UnitsIn"
- },
- {
- "name": "Units Out",
- "dataType": "int64",
- "sourceColumn": "UnitsOut"
- },
- {
- "name": "Units Balance",
- "dataType": "int64",
- "sourceColumn": "UnitsBalance",
- "summarizeBy": "none"
- },
- {
- "type": "calculated",
- "name": "Product-Date Inventory Value",
- "dataType": "decimal",
- "isDataTypeInferred": true,
- "expression": "[Unit Cost]*[Units Balance]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "type": "calculated",
- "name": "Product-Date Optimal Inventory Value",
- "dataType": "decimal",
- "isDataTypeInferred": true,
- "expression": "[Unit Cost]*RELATED('Product'[Reorder Point])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "type": "calculated",
- "name": "Product-Date Max Inventory Value",
- "dataType": "decimal",
- "isDataTypeInferred": true,
- "expression": "[Unit Cost]*RELATED('Product'[Safety Stock Level])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "type": "calculated",
- "name": "Product-Date OverStocked",
- "dataType": "int64",
- "isDataTypeInferred": true,
- "expression": "IF([Units Balance]>RELATED('Product'[Safety Stock Level]),1,0)"
- },
- {
- "type": "calculated",
- "name": "Product-Date UnderStocked",
- "dataType": "int64",
- "isDataTypeInferred": true,
- "expression": "IF([Units Balance]= 20050101) AND ([DateKey] <= 20051231))",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization",
- "value": [
- "<?xml version=\"1.0\" encoding=\"UTF-16\"?><Gemini xmlns=\"TableWidgetSerialization\"><AnnotationContent><![CDATA[<?xml version=\"1.0\"?>",
- "<TableWidgetGridSerialization xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
- " <ColumnSuggestedType />",
- " <ColumnFormat />",
- " <ColumnAccuracy />",
- " <ColumnCurrencySymbol />",
- " <ColumnPositivePattern />",
- " <ColumnNegativePattern />",
- " <ColumnWidths>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>105</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>123</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>84</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>92</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>111</int>",
- " </value>",
- " </item>",
- " </ColumnWidths>",
- " <ColumnDisplayIndex>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>0</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>1</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>2</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>3</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>4</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>5</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>6</int>",
- " </value>",
- " </item>",
- " </ColumnDisplayIndex>",
- " <ColumnFrozen />",
- " <ColumnChecked />",
- " <ColumnFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <FilterExpression xsi:type=\"LogicalExpression\">",
- " <Operator>AND</Operator>",
- " <ExpressionList>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>GreaterThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20050101</Value>",
- " </FilterExpression>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>LesserThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20051231</Value>",
- " </FilterExpression>",
- " </ExpressionList>",
- " </FilterExpression>",
- " </value>",
- " </item>",
- " </ColumnFilter>",
- " <SelectionFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <SelectionFilter xsi:nil=\"true\" />",
- " </value>",
- " </item>",
- " </SelectionFilter>",
- " <FilterParameters>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <CommandParameters />",
- " </value>",
- " </item>",
- " </FilterParameters>",
- " <IsSortDescending>false</IsSortDescending>",
- "</TableWidgetGridSerialization>]]></AnnotationContent></Gemini>"
- ]
- },
- {
- "name": "TableWidgetSourceTable"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- },
- {
- "name": "Product Inventory 2006",
- "mode": "import",
- "source": {
- "query": "SELECT [dbo].[FactProductInventory].* \t\tFROM [dbo].[FactProductInventory] WHERE (([DateKey] >= 20060101) AND ([DateKey] <= 20061231))",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization",
- "value": [
- "<?xml version=\"1.0\" encoding=\"UTF-16\"?><Gemini xmlns=\"TableWidgetSerialization\"><AnnotationContent><![CDATA[<?xml version=\"1.0\"?>",
- "<TableWidgetGridSerialization xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
- " <ColumnSuggestedType />",
- " <ColumnFormat />",
- " <ColumnAccuracy />",
- " <ColumnCurrencySymbol />",
- " <ColumnPositivePattern />",
- " <ColumnNegativePattern />",
- " <ColumnWidths>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>105</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>123</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>84</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>92</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>111</int>",
- " </value>",
- " </item>",
- " </ColumnWidths>",
- " <ColumnDisplayIndex>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>0</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>1</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>2</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>3</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>4</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>5</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>6</int>",
- " </value>",
- " </item>",
- " </ColumnDisplayIndex>",
- " <ColumnFrozen />",
- " <ColumnChecked />",
- " <ColumnFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <FilterExpression xsi:type=\"LogicalExpression\">",
- " <Operator>AND</Operator>",
- " <ExpressionList>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>GreaterThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20060101</Value>",
- " </FilterExpression>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>LesserThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20061231</Value>",
- " </FilterExpression>",
- " </ExpressionList>",
- " </FilterExpression>",
- " </value>",
- " </item>",
- " </ColumnFilter>",
- " <SelectionFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <SelectionFilter xsi:nil=\"true\" />",
- " </value>",
- " </item>",
- " </SelectionFilter>",
- " <FilterParameters>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <CommandParameters />",
- " </value>",
- " </item>",
- " </FilterParameters>",
- " <IsSortDescending>false</IsSortDescending>",
- "</TableWidgetGridSerialization>]]></AnnotationContent></Gemini>"
- ]
- },
- {
- "name": "TableWidgetSourceTable"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- },
- {
- "name": "Product Inventory 2007",
- "mode": "import",
- "source": {
- "query": "SELECT [dbo].[FactProductInventory].* \t\tFROM [dbo].[FactProductInventory] WHERE (([DateKey] >= 20070101) AND ([DateKey] <= 20071231))",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization",
- "value": [
- "<?xml version=\"1.0\" encoding=\"UTF-16\"?><Gemini xmlns=\"TableWidgetSerialization\"><AnnotationContent><![CDATA[<?xml version=\"1.0\"?>",
- "<TableWidgetGridSerialization xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
- " <ColumnSuggestedType />",
- " <ColumnFormat />",
- " <ColumnAccuracy />",
- " <ColumnCurrencySymbol />",
- " <ColumnPositivePattern />",
- " <ColumnNegativePattern />",
- " <ColumnWidths>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>105</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>123</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>84</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>92</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>111</int>",
- " </value>",
- " </item>",
- " </ColumnWidths>",
- " <ColumnDisplayIndex>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>0</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>1</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>2</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>3</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>4</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>5</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>6</int>",
- " </value>",
- " </item>",
- " </ColumnDisplayIndex>",
- " <ColumnFrozen />",
- " <ColumnChecked />",
- " <ColumnFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <FilterExpression xsi:type=\"LogicalExpression\">",
- " <Operator>AND</Operator>",
- " <ExpressionList>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>GreaterThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20070101</Value>",
- " </FilterExpression>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>LesserThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20071231</Value>",
- " </FilterExpression>",
- " </ExpressionList>",
- " </FilterExpression>",
- " </value>",
- " </item>",
- " </ColumnFilter>",
- " <SelectionFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <SelectionFilter xsi:nil=\"true\" />",
- " </value>",
- " </item>",
- " </SelectionFilter>",
- " <FilterParameters>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <CommandParameters />",
- " </value>",
- " </item>",
- " </FilterParameters>",
- " <IsSortDescending>false</IsSortDescending>",
- "</TableWidgetGridSerialization>]]></AnnotationContent></Gemini>"
- ]
- },
- {
- "name": "TableWidgetSourceTable"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- },
- {
- "name": "Product Inventory 2008",
- "mode": "import",
- "source": {
- "query": "SELECT [dbo].[FactProductInventory].* \t\tFROM [dbo].[FactProductInventory] WHERE (([DateKey] >= 20080101) AND ([DateKey] <= 20081231))",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization",
- "value": [
- "<?xml version=\"1.0\" encoding=\"UTF-16\"?><Gemini xmlns=\"TableWidgetSerialization\"><AnnotationContent><![CDATA[<?xml version=\"1.0\"?>",
- "<TableWidgetGridSerialization xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
- " <ColumnSuggestedType />",
- " <ColumnFormat />",
- " <ColumnAccuracy />",
- " <ColumnCurrencySymbol />",
- " <ColumnPositivePattern />",
- " <ColumnNegativePattern />",
- " <ColumnWidths>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>105</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>123</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>84</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>92</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>111</int>",
- " </value>",
- " </item>",
- " </ColumnWidths>",
- " <ColumnDisplayIndex>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>0</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>1</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>2</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>3</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>4</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>5</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>6</int>",
- " </value>",
- " </item>",
- " </ColumnDisplayIndex>",
- " <ColumnFrozen />",
- " <ColumnChecked />",
- " <ColumnFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <FilterExpression xsi:type=\"LogicalExpression\">",
- " <Operator>AND</Operator>",
- " <ExpressionList>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>GreaterThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20080101</Value>",
- " </FilterExpression>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>LesserThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20081231</Value>",
- " </FilterExpression>",
- " </ExpressionList>",
- " </FilterExpression>",
- " </value>",
- " </item>",
- " </ColumnFilter>",
- " <SelectionFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <SelectionFilter xsi:nil=\"true\" />",
- " </value>",
- " </item>",
- " </SelectionFilter>",
- " <FilterParameters>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <CommandParameters />",
- " </value>",
- " </item>",
- " </FilterParameters>",
- " <IsSortDescending>false</IsSortDescending>",
- "</TableWidgetGridSerialization>]]></AnnotationContent></Gemini>"
- ]
- },
- {
- "name": "TableWidgetSourceTable"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- },
- {
- "name": "Product Inventory 2009",
- "mode": "import",
- "source": {
- "query": "SELECT [dbo].[FactProductInventory].* \t\tFROM [dbo].[FactProductInventory] WHERE (([DateKey] >= 20090101) AND ([DateKey] <= 20091231))",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization",
- "value": [
- "<?xml version=\"1.0\" encoding=\"UTF-16\"?><Gemini xmlns=\"TableWidgetSerialization\"><AnnotationContent><![CDATA[<?xml version=\"1.0\"?>",
- "<TableWidgetGridSerialization xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
- " <ColumnSuggestedType />",
- " <ColumnFormat />",
- " <ColumnAccuracy />",
- " <ColumnCurrencySymbol />",
- " <ColumnPositivePattern />",
- " <ColumnNegativePattern />",
- " <ColumnWidths>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>105</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>123</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>84</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>92</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>111</int>",
- " </value>",
- " </item>",
- " </ColumnWidths>",
- " <ColumnDisplayIndex>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>0</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>1</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>2</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>3</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>4</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>5</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>6</int>",
- " </value>",
- " </item>",
- " </ColumnDisplayIndex>",
- " <ColumnFrozen />",
- " <ColumnChecked />",
- " <ColumnFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <FilterExpression xsi:type=\"LogicalExpression\">",
- " <Operator>AND</Operator>",
- " <ExpressionList>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>GreaterThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20090101</Value>",
- " </FilterExpression>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>LesserThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20091231</Value>",
- " </FilterExpression>",
- " </ExpressionList>",
- " </FilterExpression>",
- " </value>",
- " </item>",
- " </ColumnFilter>",
- " <SelectionFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <SelectionFilter xsi:nil=\"true\" />",
- " </value>",
- " </item>",
- " </SelectionFilter>",
- " <FilterParameters>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <CommandParameters />",
- " </value>",
- " </item>",
- " </FilterParameters>",
- " <IsSortDescending>false</IsSortDescending>",
- "</TableWidgetGridSerialization>]]></AnnotationContent></Gemini>"
- ]
- },
- {
- "name": "TableWidgetSourceTable"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- },
- {
- "name": "Product Inventory 2010",
- "mode": "import",
- "source": {
- "query": "SELECT [dbo].[FactProductInventory].* \t\tFROM [dbo].[FactProductInventory] WHERE (([DateKey] >= 20100101) AND ([DateKey] <= 20101231))",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "TableWidgetSerialization",
- "value": [
- "<?xml version=\"1.0\" encoding=\"UTF-16\"?><Gemini xmlns=\"TableWidgetSerialization\"><AnnotationContent><![CDATA[<?xml version=\"1.0\"?>",
- "<TableWidgetGridSerialization xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
- " <ColumnSuggestedType />",
- " <ColumnFormat />",
- " <ColumnAccuracy />",
- " <ColumnCurrencySymbol />",
- " <ColumnPositivePattern />",
- " <ColumnNegativePattern />",
- " <ColumnWidths>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>105</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>123</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>91</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>84</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>92</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>111</int>",
- " </value>",
- " </item>",
- " </ColumnWidths>",
- " <ColumnDisplayIndex>",
- " <item>",
- " <key>",
- " <string>ProductKey</string>",
- " </key>",
- " <value>",
- " <int>0</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <int>1</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>MovementDate</string>",
- " </key>",
- " <value>",
- " <int>2</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitCost</string>",
- " </key>",
- " <value>",
- " <int>3</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsIn</string>",
- " </key>",
- " <value>",
- " <int>4</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsOut</string>",
- " </key>",
- " <value>",
- " <int>5</int>",
- " </value>",
- " </item>",
- " <item>",
- " <key>",
- " <string>UnitsBalance</string>",
- " </key>",
- " <value>",
- " <int>6</int>",
- " </value>",
- " </item>",
- " </ColumnDisplayIndex>",
- " <ColumnFrozen />",
- " <ColumnChecked />",
- " <ColumnFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <FilterExpression xsi:type=\"LogicalExpression\">",
- " <Operator>AND</Operator>",
- " <ExpressionList>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>GreaterThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20100101</Value>",
- " </FilterExpression>",
- " <FilterExpression xsi:type=\"ConditionalExpression\">",
- " <Operator>LesserThanEqualTo</Operator>",
- " <Value xsi:type=\"xsd:double\">20101231</Value>",
- " </FilterExpression>",
- " </ExpressionList>",
- " </FilterExpression>",
- " </value>",
- " </item>",
- " </ColumnFilter>",
- " <SelectionFilter>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <SelectionFilter xsi:nil=\"true\" />",
- " </value>",
- " </item>",
- " </SelectionFilter>",
- " <FilterParameters>",
- " <item>",
- " <key>",
- " <string>DateKey</string>",
- " </key>",
- " <value>",
- " <CommandParameters />",
- " </value>",
- " </item>",
- " </FilterParameters>",
- " <IsSortDescending>false</IsSortDescending>",
- "</TableWidgetGridSerialization>]]></AnnotationContent></Gemini>"
- ]
- },
- {
- "name": "TableWidgetSourceTable"
- },
- {
- "name": "QueryEditorSerialization"
- }
- ]
- }
- ],
- "measures": [
- {
- "name": "Total Units In",
- "expression": "SUM([Units In])",
- "formatString": "#,0"
- },
- {
- "name": "Total Units Out",
- "expression": "SUM([Units Out])",
- "formatString": "#,0"
- },
- {
- "name": "Total Units Movement",
- "expression": "[Total Units In]-[Total Units Out]",
- "formatString": "#,0"
- },
- {
- "name": "Total Units",
- "expression": "CALCULATE(SUM([Units Balance]),LASTDATE('Product Inventory'[Movement Date]))",
- "formatString": "#,0"
- },
- {
- "name": "Total Inventory Value",
- "expression": "CALCULATE(SUM([Product-Date Inventory Value]),LASTDATE('Product Inventory'[Movement Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Inventory Optimal Value",
- "expression": "CALCULATE(SUM([Product-Date Optimal Inventory Value]),LASTDATE('Product Inventory'[Movement Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Inventory Maximum Value",
- "expression": "CALCULATE(SUM([Product-Date Max Inventory Value]),LASTDATE('Product Inventory'[Movement Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Inventory Value Performance",
- "expression": "IF([Total Inventory Value]<[Total Inventory Optimal Value],-(1-([Total Inventory Value]/[Total Inventory Optimal Value])),([Total Inventory Value]-[Total Inventory Optimal Value])/([Total Inventory Maximum Value]-[Total Inventory Optimal Value]))",
- "kpi": {
- "targetExpression": "0",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Product Inventory'[Total Inventory Value Performance]),BLANK(),",
- " If('Product Inventory'[Total Inventory Value Performance]<0,",
- "\t If('Product Inventory'[Total Inventory Value Performance]<-0.2,-1,0),",
- "\t If('Product Inventory'[Total Inventory Value Performance]<0.6,1,",
- "\t\t If('Product Inventory'[Total Inventory Value Performance]<1,0,-1)",
- "\t )",
- " )",
- " )",
- " "
- ],
- "annotations": [
- {
- "name": "GoalType",
- "value": "StaticValue"
- },
- {
- "name": "KpiStatusType",
- "value": "Centered"
- },
- {
- "name": "KpiThresholdType",
- "value": "Absolute"
- },
- {
- "name": "KpiThresholdOrdering",
- "value": "Ascending"
- },
- {
- "name": "KpiThresholdCount",
- "value": "4"
- },
- {
- "name": "KpiThreshold_0",
- "value": "-0.2"
- },
- {
- "name": "KpiThreshold_1",
- "value": "0"
- },
- {
- "name": "KpiThreshold_2",
- "value": "0.6"
- },
- {
- "name": "KpiThreshold_3",
- "value": "1"
- }
- ]
- }
- },
- {
- "name": "Products OverStocked",
- "expression": "CALCULATE(SUM([Product-Date OverStocked]),LASTDATE('Product Inventory'[Movement Date]))",
- "kpi": {
- "targetExpression": "0",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Product Inventory'[Products OverStocked]),BLANK(),",
- " If('Product Inventory'[Products OverStocked]<1,1,",
- "\t If('Product Inventory'[Products OverStocked]<5,0,-1)",
- " )",
- " )",
- " "
- ],
- "annotations": [
- {
- "name": "GoalType",
- "value": "StaticValue"
- },
- {
- "name": "KpiStatusType",
- "value": "LinearReversed"
- },
- {
- "name": "KpiThresholdType",
- "value": "Absolute"
- },
- {
- "name": "KpiThresholdOrdering",
- "value": "Ascending"
- },
- {
- "name": "KpiThresholdCount",
- "value": "2"
- },
- {
- "name": "KpiThreshold_0",
- "value": "1"
- },
- {
- "name": "KpiThreshold_1",
- "value": "5"
- }
- ]
- }
- },
- {
- "name": "Products UnderStocked",
- "expression": "CALCULATE(SUM([Product-Date UnderStocked]),LASTDATE('Product Inventory'[Movement Date]))",
- "kpi": {
- "targetExpression": "0",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Product Inventory'[Products UnderStocked]),BLANK(),",
- " If('Product Inventory'[Products UnderStocked]<5,1,",
- "\t If('Product Inventory'[Products UnderStocked]<15,0,-1)",
- " )",
- " )",
- " "
- ],
- "annotations": [
- {
- "name": "GoalType",
- "value": "StaticValue"
- },
- {
- "name": "KpiStatusType",
- "value": "LinearReversed"
- },
- {
- "name": "KpiThresholdType",
- "value": "Absolute"
- },
- {
- "name": "KpiThresholdOrdering",
- "value": "Ascending"
- },
- {
- "name": "KpiThresholdCount",
- "value": "2"
- },
- {
- "name": "KpiThreshold_0",
- "value": "5"
- },
- {
- "name": "KpiThreshold_1",
- "value": "15"
- }
- ]
- }
- },
- {
- "name": "Products with Negative Stock",
- "expression": "CALCULATE(SUM([Product-Date Negative Stock]),LASTDATE('Product Inventory'[Movement Date]))",
- "kpi": {
- "targetExpression": "0",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Product Inventory'[Products with Negative Stock]),BLANK(),",
- " If('Product Inventory'[Products with Negative Stock]<0.1,1,",
- "\t If('Product Inventory'[Products with Negative Stock]<5,0,-1)",
- " )",
- " )",
- " "
- ],
- "annotations": [
- {
- "name": "GoalType",
- "value": "StaticValue"
- },
- {
- "name": "KpiStatusType",
- "value": "LinearReversed"
- },
- {
- "name": "KpiThresholdType",
- "value": "Absolute"
- },
- {
- "name": "KpiThresholdOrdering",
- "value": "Ascending"
- },
- {
- "name": "KpiThresholdCount",
- "value": "2"
- },
- {
- "name": "KpiThreshold_0",
- "value": "0.1"
- },
- {
- "name": "KpiThreshold_1",
- "value": "5"
- }
- ]
- }
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "FactProductInventory"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[FactProductInventory].* FROM [dbo].[FactProductInventory] "
- }
- ]
- },
- {
- "name": "Sales Quota",
- "columns": [
- {
- "name": "SalesQuotaKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "SalesQuotaKey",
- "summarizeBy": "none"
- },
- {
- "name": "EmployeeKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "EmployeeKey",
- "summarizeBy": "none"
- },
- {
- "name": "DateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "DateKey",
- "summarizeBy": "none"
- },
- {
- "name": "Calendar Year",
- "dataType": "int64",
- "sourceColumn": "CalendarYear",
- "summarizeBy": "none"
- },
- {
- "name": "Calendar Quarter",
- "dataType": "int64",
- "sourceColumn": "CalendarQuarter",
- "summarizeBy": "none"
- },
- {
- "name": "Sales Amount Quota",
- "dataType": "decimal",
- "sourceColumn": "SalesAmountQuota",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Date",
- "dataType": "dateTime",
- "sourceColumn": "Date",
- "formatString": "Short Date",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- }
- ],
- "partitions": [
- {
- "name": "Sales Quota",
- "source": {
- "query": "SELECT [dbo].[FactSalesQuota].* \t\tFROM [dbo].[FactSalesQuota]",
- "dataSource": "AdventureWorksDW"
- },
- "annotations": [
- {
- "name": "QueryEditorSerialization"
- },
- {
- "name": "TableWidgetSerialization"
- }
- ]
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "FactSalesQuota"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[FactSalesQuota].* FROM [dbo].[FactSalesQuota] "
- }
- ]
- },
- {
- "name": "Internet Sales",
- "columns": [
- {
- "name": "Sales Order Number",
- "dataType": "string",
- "sourceColumn": "SalesOrderNumber"
- },
- {
- "name": "Sales Order Line Number",
- "dataType": "int64",
- "sourceColumn": "SalesOrderLineNumber",
- "summarizeBy": "none"
- },
- {
- "name": "Revision Number",
- "dataType": "int64",
- "sourceColumn": "RevisionNumber",
- "summarizeBy": "none"
- },
- {
- "name": "Order Quantity",
- "dataType": "int64",
- "sourceColumn": "OrderQuantity",
- "summarizeBy": "none"
- },
- {
- "name": "Unit Price",
- "dataType": "decimal",
- "sourceColumn": "UnitPrice",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Extended Amount",
- "dataType": "decimal",
- "sourceColumn": "ExtendedAmount",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Unit Price Discount Pct",
- "dataType": "double",
- "sourceColumn": "UnitPriceDiscountPct",
- "summarizeBy": "none"
- },
- {
- "name": "Discount Amount",
- "dataType": "decimal",
- "sourceColumn": "DiscountAmount",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Product Standard Cost",
- "dataType": "decimal",
- "sourceColumn": "ProductStandardCost",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Product Cost",
- "dataType": "decimal",
- "sourceColumn": "TotalProductCost",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Sales Amount",
- "dataType": "decimal",
- "sourceColumn": "SalesAmount",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Freight",
- "dataType": "decimal",
- "sourceColumn": "Freight",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Carrier Tracking Number",
- "dataType": "string",
- "sourceColumn": "CarrierTrackingNumber"
- },
- {
- "name": "Customer PO Number",
- "dataType": "string",
- "sourceColumn": "CustomerPONumber"
- },
- {
- "name": "Order Date",
- "dataType": "dateTime",
- "sourceColumn": "OrderDate"
- },
- {
- "name": "Due Date",
- "dataType": "dateTime",
- "sourceColumn": "DueDate"
- },
- {
- "name": "Ship Date",
- "dataType": "dateTime",
- "sourceColumn": "ShipDate"
- },
- {
- "name": "ProductKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductKey",
- "summarizeBy": "none"
- },
- {
- "name": "OrderDateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "OrderDateKey",
- "summarizeBy": "none"
- },
- {
- "name": "DueDateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "DueDateKey",
- "summarizeBy": "none"
- },
- {
- "name": "ShipDateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ShipDateKey",
- "summarizeBy": "none"
- },
- {
- "name": "CustomerKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "CustomerKey",
- "summarizeBy": "none"
- },
- {
- "name": "PromotionKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "PromotionKey",
- "summarizeBy": "none"
- },
- {
- "name": "CurrencyKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "CurrencyKey",
- "summarizeBy": "none"
- },
- {
- "name": "SalesTerritoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "SalesTerritoryKey",
- "summarizeBy": "none"
- },
- {
- "name": "Tax Amount",
- "dataType": "decimal",
- "sourceColumn": "TaxAmt",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "type": "calculated",
- "name": "Gross Profit",
- "dataType": "decimal",
- "isDataTypeInferred": true,
- "expression": "[Sales Amount]-[Total Product Cost]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- }
- ],
- "partitions": [
- {
- "name": "Internet Sales",
- "source": {
- "query": "SELECT * FROM [dbo].[FactInternetSales]",
- "dataSource": "AdventureWorksDW"
- }
- }
- ],
- "measures": [
- {
- "name": "Internet Distinct Count Sales Order",
- "expression": "DISTINCTCOUNT([Sales Order Number])",
- "formatString": "#,0"
- },
- {
- "name": "Internet Total Sales",
- "expression": "SUM([Sales Amount])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Total Discount Amount",
- "expression": "SUM([Discount Amount])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Total Product Cost",
- "expression": "SUM([Total Product Cost])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Total Freight",
- "expression": "SUM([Freight])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Total Units",
- "expression": "SUM([Order Quantity])",
- "formatString": "#,0"
- },
- {
- "name": "Internet Order Lines Count",
- "expression": "COUNT([Sales Order Line Number])",
- "formatString": "#,0"
- },
- {
- "name": "Internet Previous Quarter Sales",
- "expression": "CALCULATE([Internet Total Sales],PREVIOUSQUARTER('Date'[Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Current Quarter Sales",
- "expression": "TOTALQTD([Internet Total Sales],'Date'[Date])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Previous Quarter Sales Proportion to QTD",
- "expression": "[Internet Previous Quarter Sales]*([Days In Current Quarter]/[Days In Current Quarter])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Current Quarter Sales Performance",
- "expression": "IFERROR([Internet Current Quarter Sales]/[Internet Previous Quarter Sales Proportion to QTD],BLANK())",
- "kpi": {
- "targetExpression": "1.1",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Internet Sales'[Internet Current Quarter Sales Performance]),BLANK(),\r",
- " If('Internet Sales'[Internet Current Quarter Sales Performance]<1,-1,\r",
- "\t If('Internet Sales'[Internet Current Quarter Sales Performance]<1.07,0,1)\r",
- " )\r",
- " )\r",
- " "
- ],
- "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"
- }
- ]
- }
- },
- {
- "name": "Internet Total Tax Amount",
- "expression": "SUM([Tax Amount])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Total Gross Profit",
- "expression": "SUM([Gross Profit])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Previous Quarter Gross Profit",
- "expression": "CALCULATE([Internet Total Gross Profit],PREVIOUSQUARTER('Date'[Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Current Quarter Gross Profit",
- "expression": "TOTALQTD([Internet Total Gross Profit],'Date'[Date])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Previous Quarter Gross Profit Proportion to QTD",
- "expression": "[Internet Previous Quarter Gross Profit]*([Days In Current Quarter to Date]/[Days In Current Quarter])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Internet Current Quarter Gross Profit Performance",
- "expression": "IF([Internet Previous Quarter Gross Profit Proportion to QTD]<>0,([Internet Current Quarter Gross Profit]-[Internet Previous Quarter Gross Profit Proportion to QTD])/[Internet Previous Quarter Gross Profit Proportion to QTD],BLANK())",
- "kpi": {
- "targetExpression": "1.25",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Internet Sales'[Internet Current Quarter Gross Profit Performance]),BLANK(),\r",
- " If('Internet Sales'[Internet Current Quarter Gross Profit Performance]<0.8,-1,\r",
- "\t If('Internet Sales'[Internet Current Quarter Gross Profit Performance]<1.03,0,1)\r",
- " )\r",
- " )\r",
- " "
- ],
- "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"
- }
- ]
- }
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "FactInternetSales"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[FactInternetSales].* FROM [dbo].[FactInternetSales] "
- }
- ]
- },
- {
- "name": "Reseller Sales",
- "columns": [
- {
- "name": "ProductKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ProductKey"
- },
- {
- "name": "OrderDateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "OrderDateKey"
- },
- {
- "name": "DueDateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "DueDateKey"
- },
- {
- "name": "ShipDateKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ShipDateKey"
- },
- {
- "name": "ResellerKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "ResellerKey"
- },
- {
- "name": "EmployeeKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "EmployeeKey"
- },
- {
- "name": "PromotionKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "PromotionKey"
- },
- {
- "name": "CurrencyKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "CurrencyKey"
- },
- {
- "name": "SalesTerritoryKey",
- "dataType": "int64",
- "isHidden": true,
- "sourceColumn": "SalesTerritoryKey"
- },
- {
- "name": "Sales Order Number",
- "dataType": "string",
- "sourceColumn": "SalesOrderNumber"
- },
- {
- "name": "Sales Order Line Number",
- "dataType": "int64",
- "sourceColumn": "SalesOrderLineNumber",
- "summarizeBy": "none"
- },
- {
- "name": "Revision Number",
- "dataType": "int64",
- "sourceColumn": "RevisionNumber",
- "summarizeBy": "none"
- },
- {
- "name": "Order Quantity",
- "dataType": "int64",
- "sourceColumn": "OrderQuantity",
- "summarizeBy": "none"
- },
- {
- "name": "Unit Price",
- "dataType": "decimal",
- "sourceColumn": "UnitPrice",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Extended Amount",
- "dataType": "decimal",
- "sourceColumn": "ExtendedAmount",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Unit Price Discount Pct",
- "dataType": "double",
- "sourceColumn": "UnitPriceDiscountPct",
- "summarizeBy": "none"
- },
- {
- "name": "Discount Amount",
- "dataType": "decimal",
- "sourceColumn": "DiscountAmount",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Product Standard Cost",
- "dataType": "decimal",
- "sourceColumn": "ProductStandardCost",
- "summarizeBy": "none",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Total Product Cost",
- "dataType": "decimal",
- "sourceColumn": "TotalProductCost",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Sales Amount",
- "dataType": "decimal",
- "sourceColumn": "SalesAmount",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Tax Amount",
- "dataType": "decimal",
- "sourceColumn": "TaxAmt",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Freight",
- "dataType": "decimal",
- "sourceColumn": "Freight",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Carrier Tracking Number",
- "dataType": "string",
- "sourceColumn": "CarrierTrackingNumber"
- },
- {
- "name": "Reseller PO Number",
- "dataType": "string",
- "sourceColumn": "CustomerPONumber"
- },
- {
- "name": "Order Date",
- "dataType": "dateTime",
- "sourceColumn": "OrderDate",
- "formatString": "Short Date",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Due Date",
- "dataType": "dateTime",
- "sourceColumn": "DueDate",
- "formatString": "Short Date",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Ship Date",
- "dataType": "dateTime",
- "sourceColumn": "ShipDate",
- "formatString": "Short Date",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "type": "calculated",
- "name": "Gross Profit",
- "dataType": "decimal",
- "isDataTypeInferred": true,
- "expression": "[Sales Amount]-[Total Product Cost]",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- }
- ],
- "partitions": [
- {
- "name": "Reseller Sales",
- "source": {
- "query": "SELECT * FROM [dbo].[FactResellerSales]",
- "dataSource": "AdventureWorksDW"
- }
- }
- ],
- "measures": [
- {
- "name": "Reseller Distinct Count Sales Order",
- "expression": "DISTINCTCOUNT([Sales Order Number])",
- "formatString": "#,0"
- },
- {
- "name": "Reseller Total Sales",
- "expression": "SUM([Sales Amount])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Total Discount Amount",
- "expression": "SUM([Discount Amount])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Total Product Cost",
- "expression": "SUM([Total Product Cost])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Total Tax Amount",
- "expression": "SUM([Tax Amount])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Total Freight",
- "expression": "SUM([Freight])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Total Gross Profit",
- "expression": "SUM([Gross Profit])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Total Units",
- "expression": "SUM([Order Quantity])",
- "formatString": "#,0"
- },
- {
- "name": "Reseller Order Lines Count",
- "expression": "COUNT([Sales Order Line Number])",
- "formatString": "#,0"
- },
- {
- "name": "Reseller Previous Quarter Gross Profit",
- "expression": "CALCULATE([Reseller Total Gross Profit],PREVIOUSQUARTER('Date'[Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Current Quarter Gross Profit",
- "expression": "TOTALQTD([Reseller Total Gross Profit],'Date'[Date])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Previous Quarter Gross Profit Proportion to QTD",
- "expression": "[Reseller Previous Quarter Gross Profit]*([Days In Current Quarter to Date]/[Days In Current Quarter])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Previous Quarter Sales",
- "expression": "CALCULATE([Reseller Total Sales],PREVIOUSQUARTER('Date'[Date]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Current Quarter Sales",
- "expression": "TOTALQTD([Reseller Total Sales],'Date'[Date])",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Previous Quarter Sales Proportion to QTD",
- "expression": "[Reseller Previous Quarter Sales]*([Days In Current Quarter to Date]/[Days In Current Quarter])"
- },
- {
- "name": "Reseller Total Sales - Sales Territory sliced by Employee",
- "expression": "CALCULATE(SUM('Reseller Sales'[Sales Amount]),USERELATIONSHIP(Employee[EmployeeKey],'Reseller Sales'[EmployeeKey]),USERELATIONSHIP('Sales Territory'[SalesTerritoryKey],Employee[SalesTerritoryKey]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Total Sales - Sales Territory sliced by Reseller",
- "expression": "CALCULATE(SUM('Reseller Sales'[Sales Amount]), USERELATIONSHIP(Reseller[ResellerKey], 'Reseller Sales'[ResellerKey]), USERELATIONSHIP(Geography[GeographyKey], Reseller[GeographyKey]), USERELATIONSHIP('Sales Territory'[SalesTerritoryKey], Geography[SalesTerritoryKey]))",
- "formatString": "\\$#,0.00;(\\$#,0.00);\\$#,0.00",
- "annotations": [
- {
- "name": "Format",
- "value": ""
- }
- ]
- },
- {
- "name": "Reseller Current Quarter Sales Performance",
- "expression": "IFERROR([Reseller Current Quarter Sales]/[Reseller Previous Quarter Sales Proportion to QTD],BLANK())",
- "kpi": {
- "targetExpression": "1.1",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Reseller Sales'[Reseller Current Quarter Sales Performance]),BLANK(),\r",
- " If('Reseller Sales'[Reseller Current Quarter Sales Performance]<0.8,-1,\r",
- "\t If('Reseller Sales'[Reseller Current Quarter Sales Performance]<1.07,0,1)\r",
- " )\r",
- " )\r",
- " "
- ],
- "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.07"
- }
- ]
- }
- },
- {
- "name": "Reseller Current Quarter Gross Profit Performance",
- "expression": "IF([Reseller Previous Quarter Gross Profit Proportion to QTD]<>0,([Reseller Current Quarter Gross Profit]-[Reseller Previous Quarter Gross Profit Proportion to QTD])/[Reseller Previous Quarter Gross Profit Proportion to QTD],BLANK())",
- "kpi": {
- "targetExpression": "1.25",
- "statusGraphic": "Three Symbols UnCircled Colored",
- "statusExpression": [
- "if(ISBLANK('Reseller Sales'[Reseller Current Quarter Gross Profit Performance]),BLANK(),\r",
- " If('Reseller Sales'[Reseller Current Quarter Gross Profit Performance]<0.8,-1,\r",
- "\t If('Reseller Sales'[Reseller Current Quarter Gross Profit Performance]<1.03,0,1)\r",
- " )\r",
- " )\r",
- " "
- ],
- "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"
- }
- ]
- }
- }
- ],
- "annotations": [
- {
- "name": "_TM_ExtProp_DbSchemaName",
- "value": "dbo"
- },
- {
- "name": "_TM_ExtProp_DbTableName",
- "value": "FactResellerSales"
- },
- {
- "name": "_TM_ExtProp_QueryDefinition",
- "value": " SELECT [dbo].[FactResellerSales].* FROM [dbo].[FactResellerSales] "
- }
- ]
- }
- ],
- "relationships": [
- {
- "name": "2c5177ff-b673-48e0-9168-821672c57e5e",
- "fromTable": "Customer",
- "fromColumn": "GeographyKey",
- "toTable": "Geography",
- "toColumn": "GeographyKey"
- },
- {
- "name": "e278ab89-4b93-42e3-b40c-636fdd8d681c",
- "fromTable": "Employee",
- "fromColumn": "SalesTerritoryKey",
- "toTable": "Sales Territory",
- "toColumn": "SalesTerritoryKey",
- "isActive": false
- },
- {
- "name": "27dae602-f0b8-43f8-940b-43fb315458bb",
- "fromTable": "Geography",
- "fromColumn": "SalesTerritoryKey",
- "toTable": "Sales Territory",
- "toColumn": "SalesTerritoryKey",
- "isActive": false
- },
- {
- "name": "9b8024a2-e51d-4a2b-9a8f-6a2199d1d2ea",
- "fromTable": "Product",
- "fromColumn": "ProductSubcategoryKey",
- "toTable": "Product Subcategory",
- "toColumn": "ProductSubcategoryKey"
- },
- {
- "name": "46425cb9-382b-4dfb-9b79-63bc5082c42b",
- "fromTable": "Product Subcategory",
- "fromColumn": "ProductCategoryKey",
- "toTable": "Product Category",
- "toColumn": "ProductCategoryKey"
- },
- {
- "name": "b32d6ef8-a309-4c10-8d36-0f0e2ae84901",
- "fromTable": "Reseller",
- "fromColumn": "GeographyKey",
- "toTable": "Geography",
- "toColumn": "GeographyKey"
- },
- {
- "name": "602b2378-4717-4122-b97e-95f36c15dc85",
- "fromTable": "Product Inventory",
- "fromColumn": "DateKey",
- "toTable": "Date",
- "toColumn": "DateKey"
- },
- {
- "name": "7dbfc7d9-a935-432d-b5c6-a53d129fbd16",
- "fromTable": "Product Inventory",
- "fromColumn": "ProductKey",
- "toTable": "Product",
- "toColumn": "ProductKey"
- },
- {
- "name": "39981e17-197f-4647-a8d8-850cbe2aea09",
- "fromTable": "Sales Quota",
- "fromColumn": "DateKey",
- "toTable": "Date",
- "toColumn": "DateKey"
- },
- {
- "name": "d96cf292-44da-4a47-837c-173bf1f49c18",
- "fromTable": "Sales Quota",
- "fromColumn": "EmployeeKey",
- "toTable": "Employee",
- "toColumn": "EmployeeKey"
- },
- {
- "name": "877c4e4a-6f61-43c8-ae8b-b748a6400407",
- "fromTable": "Internet Sales",
- "fromColumn": "CurrencyKey",
- "toTable": "Currency",
- "toColumn": "CurrencyKey"
- },
- {
- "name": "90d94b82-0243-4632-b9f7-99de63279961",
- "fromTable": "Internet Sales",
- "fromColumn": "CustomerKey",
- "toTable": "Customer",
- "toColumn": "CustomerKey"
- },
- {
- "name": "3db0e485-88a9-44d9-9a12-657c8ef0f881",
- "fromTable": "Internet Sales",
- "fromColumn": "OrderDateKey",
- "toTable": "Date",
- "toColumn": "DateKey"
- },
- {
- "name": "f5617b1d-9840-4978-8860-f337cb5f852d",
- "fromTable": "Internet Sales",
- "fromColumn": "DueDateKey",
- "toTable": "Date",
- "toColumn": "DateKey",
- "isActive": false
- },
- {
- "name": "8cd93710-86b7-47a6-b512-230bc4c3e73d",
- "fromTable": "Internet Sales",
- "fromColumn": "ShipDateKey",
- "toTable": "Date",
- "toColumn": "DateKey",
- "isActive": false
- },
- {
- "name": "a5016faf-9af5-4750-92ff-505d05aefe68",
- "fromTable": "Internet Sales",
- "fromColumn": "ProductKey",
- "toTable": "Product",
- "toColumn": "ProductKey"
- },
- {
- "name": "b3d9edf1-1e10-436b-b870-80029b0ee4f3",
- "fromTable": "Internet Sales",
- "fromColumn": "PromotionKey",
- "toTable": "Promotion",
- "toColumn": "PromotionKey"
- },
- {
- "name": "d9761f6e-1fec-476d-9eee-9e1511044619",
- "fromTable": "Internet Sales",
- "fromColumn": "SalesTerritoryKey",
- "toTable": "Sales Territory",
- "toColumn": "SalesTerritoryKey"
- },
- {
- "name": "1b277ca4-d6fc-4366-b164-2fd3c56cfd24",
- "fromTable": "Reseller Sales",
- "fromColumn": "CurrencyKey",
- "toTable": "Currency",
- "toColumn": "CurrencyKey"
- },
- {
- "name": "100ca454-655f-4e46-a040-cfa2ca981f88",
- "fromTable": "Reseller Sales",
- "fromColumn": "OrderDateKey",
- "toTable": "Date",
- "toColumn": "DateKey"
- },
- {
- "name": "1f6426cb-30d0-4d70-bbd5-5da59ce7292b",
- "fromTable": "Reseller Sales",
- "fromColumn": "DueDateKey",
- "toTable": "Date",
- "toColumn": "DateKey",
- "isActive": false
- },
- {
- "name": "1c37fcb7-a454-4b11-8389-9a97d5d09f4c",
- "fromTable": "Reseller Sales",
- "fromColumn": "ShipDateKey",
- "toTable": "Date",
- "toColumn": "DateKey",
- "isActive": false
- },
- {
- "name": "262def50-5047-491a-8fc6-e96a9d66a80b",
- "fromTable": "Reseller Sales",
- "fromColumn": "EmployeeKey",
- "toTable": "Employee",
- "toColumn": "EmployeeKey"
- },
- {
- "name": "adbcdd01-4156-4b47-9c94-5f6283c9c20a",
- "fromTable": "Reseller Sales",
- "fromColumn": "ProductKey",
- "toTable": "Product",
- "toColumn": "ProductKey"
- },
- {
- "name": "03b67804-b82a-433a-9589-f768a6eb3945",
- "fromTable": "Reseller Sales",
- "fromColumn": "PromotionKey",
- "toTable": "Promotion",
- "toColumn": "PromotionKey"
- },
- {
- "name": "431b1361-7b09-4540-91d3-fda884108451",
- "fromTable": "Reseller Sales",
- "fromColumn": "ResellerKey",
- "toTable": "Reseller",
- "toColumn": "ResellerKey"
- },
- {
- "name": "b62a7abc-f954-41a1-ac0a-bce7fdd5eaa7",
- "fromTable": "Reseller Sales",
- "fromColumn": "SalesTerritoryKey",
- "toTable": "Sales Territory",
- "toColumn": "SalesTerritoryKey"
- }
- ],
- "perspectives": [
- {
- "name": "Inventory",
- "tables": [
- {
- "name": "Product Inventory",
- "columns": [
- {
- "name": "Units In"
- },
- {
- "name": "Product-Date OverStocked"
- },
- {
- "name": "Units Balance"
- },
- {
- "name": "Product-Date Negative Stock"
- },
- {
- "name": "Unit Cost"
- },
- {
- "name": "DateKey"
- },
- {
- "name": "Product-Date Inventory Value"
- },
- {
- "name": "Movement Date"
- },
- {
- "name": "Product-Date UnderStocked"
- },
- {
- "name": "Units Out"
- },
- {
- "name": "ProductKey"
- },
- {
- "name": "Product-Date Optimal Inventory Value"
- },
- {
- "name": "Product-Date Max Inventory Value"
- }
- ],
- "measures": [
- {
- "name": "Total Inventory Value Performance"
- },
- {
- "name": "Total Units Out"
- },
- {
- "name": "Total Units"
- },
- {
- "name": "Total Units Movement"
- },
- {
- "name": "Products with Negative Stock"
- },
- {
- "name": "Products UnderStocked"
- },
- {
- "name": "Total Inventory Value"
- },
- {
- "name": "Total Units In"
- },
- {
- "name": "Total Inventory Maximum Value"
- },
- {
- "name": "Total Inventory Optimal Value"
- },
- {
- "name": "Products OverStocked"
- }
- ]
- },
- {
- "name": "Date",
- "columns": [
- {
- "name": "Month Name"
- },
- {
- "name": "Calendar Quarter"
- },
- {
- "name": "Month"
- },
- {
- "name": "Week Of Year"
- },
- {
- "name": "Calendar Year"
- },
- {
- "name": "Fiscal Quarter"
- },
- {
- "name": "Day Of Month"
- },
- {
- "name": "Fiscal Year"
- },
- {
- "name": "Day Name Of Week"
- },
- {
- "name": "Day Of Year"
- },
- {
- "name": "DateKey"
- },
- {
- "name": "Date"
- },
- {
- "name": "Fiscal Semester"
- },
- {
- "name": "Day Number Of Week"
- },
- {
- "name": "Calendar Semester"
- }
- ],
- "measures": [
- {
- "name": "Days In Current Quarter to Date"
- },
- {
- "name": "Days In Current Quarter"
- }
- ]
- },
- {
- "name": "Product",
- "columns": [
- {
- "name": "Product SubCategory Name"
- },
- {
- "name": "Style"
- },
- {
- "name": "Model Name"
- },
- {
- "name": "Product Name"
- },
- {
- "name": "Product Start Date"
- },
- {
- "name": "Weight Unit Code"
- },
- {
- "name": "Safety Stock Level"
- },
- {
- "name": "Product Id"
- },
- {
- "name": "Standard Cost"
- },
- {
- "name": "Color"
- },
- {
- "name": "Days To Manufacture"
- },
- {
- "name": "Dealer Price"
- },
- {
- "name": "ProductKey"
- },
- {
- "name": "LargePhoto"
- },
- {
- "name": "Size"
- },
- {
- "name": "Is Finished Goods"
- },
- {
- "name": "Description"
- },
- {
- "name": "Product Line"
- },
- {
- "name": "Size Unit Code"
- },
- {
- "name": "List Price"
- },
- {
- "name": "Class"
- },
- {
- "name": "Size Range"
- },
- {
- "name": "Reorder Point"
- },
- {
- "name": "Product Status"
- },
- {
- "name": "Weight"
- },
- {
- "name": "ProductSubcategoryKey"
- },
- {
- "name": "Product Category Name"
- },
- {
- "name": "Product End Date"
- }
- ]
- },
- {
- "name": "Product Subcategory",
- "columns": [
- {
- "name": "Product Subcategory Name"
- },
- {
- "name": "ProductSubcategoryKey"
- },
- {
- "name": "ProductCategoryKey"
- }
- ]
- },
- {
- "name": "Product Category",
- "columns": [
- {
- "name": "Product Category Name"
- },
- {
- "name": "ProductCategoryKey"
- }
- ]
- }
- ]
- },
- {
- "name": "Internet Operation",
- "tables": [
- {
- "name": "Date",
- "columns": [
- {
- "name": "Month Name"
- },
- {
- "name": "Calendar Quarter"
- },
- {
- "name": "Month"
- },
- {
- "name": "Week Of Year"
- },
- {
- "name": "Calendar Year"
- },
- {
- "name": "Fiscal Quarter"
- },
- {
- "name": "Day Of Month"
- },
- {
- "name": "Fiscal Year"
- },
- {
- "name": "Day Name Of Week"
- },
- {
- "name": "Day Of Year"
- },
- {
- "name": "DateKey"
- },
- {
- "name": "Date"
- },
- {
- "name": "Fiscal Semester"
- },
- {
- "name": "Day Number Of Week"
- },
- {
- "name": "Calendar Semester"
- }
- ],
- "measures": [
- {
- "name": "Days In Current Quarter to Date"
- },
- {
- "name": "Days In Current Quarter"
- }
- ]
- },
- {
- "name": "Internet Sales",
- "columns": [
- {
- "name": "Carrier Tracking Number"
- },
- {
- "name": "Order Date"
- },
- {
- "name": "Sales Order Line Number"
- },
- {
- "name": "CustomerKey"
- },
- {
- "name": "Gross Profit"
- },
- {
- "name": "Due Date"
- },
- {
- "name": "Sales Order Number"
- },
- {
- "name": "Discount Amount"
- },
- {
- "name": "Sales Amount"
- },
- {
- "name": "PromotionKey"
- },
- {
- "name": "Customer PO Number"
- },
- {
- "name": "ProductKey"
- },
- {
- "name": "Unit Price"
- },
- {
- "name": "Freight"
- },
- {
- "name": "Total Product Cost"
- },
- {
- "name": "CurrencyKey"
- },
- {
- "name": "ShipDateKey"
- },
- {
- "name": "Product Standard Cost"
- },
- {
- "name": "Extended Amount"
- },
- {
- "name": "Order Quantity"
- },
- {
- "name": "Revision Number"
- },
- {
- "name": "SalesTerritoryKey"
- },
- {
- "name": "Tax Amount"
- },
- {
- "name": "OrderDateKey"
- },
- {
- "name": "Unit Price Discount Pct"
- },
- {
- "name": "Ship Date"
- },
- {
- "name": "DueDateKey"
- }
- ],
- "measures": [
- {
- "name": "Internet Total Gross Profit"
- },
- {
- "name": "Internet Previous Quarter Sales Proportion to QTD"
- },
- {
- "name": "Internet Current Quarter Gross Profit Performance"
- },
- {
- "name": "Internet Current Quarter Sales"
- },
- {
- "name": "Internet Current Quarter Sales Performance"
- },
- {
- "name": "Internet Total Product Cost"
- },
- {
- "name": "Internet Distinct Count Sales Order"
- },
- {
- "name": "Internet Previous Quarter Gross Profit"
- },
- {
- "name": "Internet Total Sales"
- },
- {
- "name": "Internet Previous Quarter Gross Profit Proportion to QTD"
- },
- {
- "name": "Internet Order Lines Count"
- },
- {
- "name": "Internet Previous Quarter Sales"
- },
- {
- "name": "Internet Total Freight"
- },
- {
- "name": "Internet Total Units"
- },
- {
- "name": "Internet Total Tax Amount"
- },
- {
- "name": "Internet Current Quarter Gross Profit"
- },
- {
- "name": "Internet Total Discount Amount"
- }
- ]
- },
- {
- "name": "Sales Territory",
- "columns": [
- {
- "name": "Sales Territory Region"
- },
- {
- "name": "SalesTerritoryKey"
- },
- {
- "name": "Sales Territory Country"
- },
- {
- "name": "Sales Territory Group"
- },
- {
- "name": "Sales Territory Image"
- }
- ],
- "measures": [
- {
- "name": "Total Gross Profit"
- },
- {
- "name": "Distinct Count Sales Orders"
- },
- {
- "name": "Total Sales - Sales Territory sliced by Employee"
- },
- {
- "name": "Total Current Quarter Sales"
- },
- {
- "name": "Total Previous Quarter Sales"
- },
- {
- "name": "Total Tax Amount"
- },
- {
- "name": "Total Current Quarter Sales Performance"
- },
- {
- "name": "Total Freight"
- },
- {
- "name": "Total Sales"
- },
- {
- "name": "Total Previous Quarter Gross Profit Proportion to QTD"
- },
- {
- "name": "Order Lines Count"
- },
- {
- "name": "Total Discount Amount"
- },
- {
- "name": "Total Previous Quarter Sales Proportion to QTD"
- },
- {
- "name": "Total Products Cost"
- },
- {
- "name": "Total Units Sold"
- },
- {
- "name": "Total Current Quarter Gross Profit Performance"
- },
- {
- "name": "Total Current Quarter Gross Profit"
- },
- {
- "name": "Total Previous Quarter Gross Profit"
- }
- ]
- },
- {
- "name": "Product",
- "columns": [
- {
- "name": "Product SubCategory Name"
- },
- {
- "name": "Style"
- },
- {
- "name": "Model Name"
- },
- {
- "name": "Product Name"
- },
- {
- "name": "Product Start Date"
- },
- {
- "name": "Weight Unit Code"
- },
- {
- "name": "Safety Stock Level"
- },
- {
- "name": "Product Id"
- },
- {
- "name": "Standard Cost"
- },
- {
- "name": "Color"
- },
- {
- "name": "Days To Manufacture"
- },
- {
- "name": "Dealer Price"
- },
- {
- "name": "ProductKey"
- },
- {
- "name": "LargePhoto"
- },
- {
- "name": "Size"
- },
- {
- "name": "Is Finished Goods"
- },
- {
- "name": "Description"
- },
- {
- "name": "Product Line"
- },
- {
- "name": "Size Unit Code"
- },
- {
- "name": "List Price"
- },
- {
- "name": "Class"
- },
- {
- "name": "Size Range"
- },
- {
- "name": "Reorder Point"
- },
- {
- "name": "Product Status"
- },
- {
- "name": "Weight"
- },
- {
- "name": "ProductSubcategoryKey"
- },
- {
- "name": "Product Category Name"
- },
- {
- "name": "Product End Date"
- }
- ]
- },
- {
- "name": "Promotion",
- "columns": [
- {
- "name": "Promotion Name"
- },
- {
- "name": "Max Quantity"
- },
- {
- "name": "Promotion Type"
- },
- {
- "name": "Promotion Start Date"
- },
- {
- "name": "Min Quantity"
- },
- {
- "name": "Promotion Category"
- },
- {
- "name": "DiscountPct"
- },
- {
- "name": "PromotionKey"
- },
- {
- "name": "Promotion End Date"
- }
- ]
- },
- {
- "name": "Product Subcategory",
- "columns": [
- {
- "name": "Product Subcategory Name"
- },
- {
- "name": "ProductSubcategoryKey"
- },
- {
- "name": "ProductCategoryKey"
- }
- ]
- },
- {
- "name": "Geography",
- "columns": [
- {
- "name": "City"
- },
- {
- "name": "State Province Name"
- },
- {
- "name": "Country Region Code"
- },
- {
- "name": "State Province Code"
- },
- {
- "name": "SalesTerritoryKey"
- },
- {
- "name": "GeographyKey"
- },
- {
- "name": "Country Region Name"
- },
- {
- "name": "Postal Code"
- }
- ]
- },
- {
- "name": "Customer",
- "columns": [
- {
- "name": "CustomerKey"
- },
- {
- "name": "Number of Children At Home"
- },
- {
- "name": "Middle Name"
- },
- {
- "name": "Name Style"
- },
- {
- "name": "Date Of First Purchase"
- },
- {
- "name": "Address Line 2"
- },
- {
- "name": "GeographyKey"
- },
- {
- "name": "Yearly Income"
- },
- {
- "name": "Marital Status"
- },
- {
- "name": "Phone"
- },
- {
- "name": "Email Address"
- },
- {
- "name": "Gender"
- },
- {
- "name": "Occupation"
- },
- {
- "name": "Address Line 1"
- },
- {
- "name": "Total Cars Owned"
- },
- {
- "name": "Total Children"
- },
- {
- "name": "Suffix"
- },
- {
- "name": "First Name"
- },
- {
- "name": "Birth Date"
- },
- {
- "name": "Education"
- },
- {
- "name": "Last Name"
- },
- {
- "name": "Commute Distance"
- },
- {
- "name": "Customer Id"
- },
- {
- "name": "Title"
- },
- {
- "name": "Owns House"
- }
- ]
- },
- {
- "name": "Currency",
- "columns": [
- {
- "name": "CurrencyKey"
- },
- {
- "name": "Currency Code"
- },
- {
- "name": "CurrencyName"
- }
- ]
- },
- {
- "name": "Product Category",
- "columns": [
- {
- "name": "Product Category Name"
- },
- {
- "name": "ProductCategoryKey"
- }
- ]
- }
- ]
- },
- {
- "name": "Reseller Operation",
- "tables": [
- {
- "name": "Date",
- "columns": [
- {
- "name": "Month Name"
- },
- {
- "name": "Calendar Quarter"
- },
- {
- "name": "Month"
- },
- {
- "name": "Week Of Year"
- },
- {
- "name": "Calendar Year"
- },
- {
- "name": "Fiscal Quarter"
- },
- {
- "name": "Day Of Month"
- },
- {
- "name": "Fiscal Year"
- },
- {
- "name": "Day Name Of Week"
- },
- {
- "name": "Day Of Year"
- },
- {
- "name": "DateKey"
- },
- {
- "name": "Date"
- },
- {
- "name": "Fiscal Semester"
- },
- {
- "name": "Day Number Of Week"
- },
- {
- "name": "Calendar Semester"
- }
- ],
- "measures": [
- {
- "name": "Days In Current Quarter to Date"
- },
- {
- "name": "Days In Current Quarter"
- }
- ]
- },
- {
- "name": "Reseller Sales",
- "columns": [
- {
- "name": "Sales Order Line Number"
- },
- {
- "name": "Carrier Tracking Number"
- },
- {
- "name": "Order Date"
- },
- {
- "name": "Due Date"
- },
- {
- "name": "Gross Profit"
- },
- {
- "name": "Sales Order Number"
- },
- {
- "name": "Discount Amount"
- },
- {
- "name": "Sales Amount"
- },
- {
- "name": "PromotionKey"
- },
- {
- "name": "ProductKey"
- },
- {
- "name": "Reseller PO Number"
- },
- {
- "name": "Unit Price"
- },
- {
- "name": "Freight"
- },
- {
- "name": "ResellerKey"
- },
- {
- "name": "DueDateKey"
- },
- {
- "name": "EmployeeKey"
- },
- {
- "name": "Total Product Cost"
- },
- {
- "name": "CurrencyKey"
- },
- {
- "name": "ShipDateKey"
- },
- {
- "name": "Product Standard Cost"
- },
- {
- "name": "Extended Amount"
- },
- {
- "name": "Order Quantity"
- },
- {
- "name": "Revision Number"
- },
- {
- "name": "SalesTerritoryKey"
- },
- {
- "name": "Tax Amount"
- },
- {
- "name": "OrderDateKey"
- },
- {
- "name": "Unit Price Discount Pct"
- },
- {
- "name": "Ship Date"
- }
- ],
- "measures": [
- {
- "name": "Reseller Total Tax Amount"
- },
- {
- "name": "Reseller Distinct Count Sales Order"
- },
- {
- "name": "Reseller Previous Quarter Gross Profit Proportion to QTD"
- },
- {
- "name": "Reseller Total Discount Amount"
- },
- {
- "name": "Reseller Current Quarter Sales"
- },
- {
- "name": "Reseller Total Gross Profit"
- },
- {
- "name": "Reseller Order Lines Count"
- },
- {
- "name": "Reseller Previous Quarter Sales Proportion to QTD"
- },
- {
- "name": "Reseller Total Product Cost"
- },
- {
- "name": "Reseller Previous Quarter Sales"
- },
- {
- "name": "Reseller Total Sales"
- },
- {
- "name": "Reseller Current Quarter Gross Profit Performance"
- },
- {
- "name": "Reseller Current Quarter Sales Performance"
- },
- {
- "name": "Reseller Total Units"
- },
- {
- "name": "Reseller Total Freight"
- },
- {
- "name": "Reseller Total Sales - Sales Territory sliced by Reseller"
- },
- {
- "name": "Reseller Total Sales - Sales Territory sliced by Employee"
- },
- {
- "name": "Reseller Current Quarter Gross Profit"
- },
- {
- "name": "Reseller Previous Quarter Gross Profit"
- }
- ]
- },
- {
- "name": "Sales Territory",
- "columns": [
- {
- "name": "Sales Territory Region"
- },
- {
- "name": "SalesTerritoryKey"
- },
- {
- "name": "Sales Territory Country"
- },
- {
- "name": "Sales Territory Group"
- },
- {
- "name": "Sales Territory Image"
- }
- ],
- "measures": [
- {
- "name": "Total Gross Profit"
- },
- {
- "name": "Distinct Count Sales Orders"
- },
- {
- "name": "Total Previous Quarter Sales"
- },
- {
- "name": "Total Previous Quarter Gross Profit Proportion to QTD"
- },
- {
- "name": "Order Lines Count"
- },
- {
- "name": "Total Discount Amount"
- },
- {
- "name": "Total Previous Quarter Sales Proportion to QTD"
- },
- {
- "name": "Total Products Cost"
- },
- {
- "name": "Total Units Sold"
- },
- {
- "name": "Total Current Quarter Gross Profit Performance"
- },
- {
- "name": "Total Current Quarter Gross Profit"
- },
- {
- "name": "Total Previous Quarter Gross Profit"
- },
- {
- "name": "Total Sales - Sales Territory sliced by Employee"
- },
- {
- "name": "Total Current Quarter Sales"
- },
- {
- "name": "Total Tax Amount"
- },
- {
- "name": "Total Current Quarter Sales Performance"
- },
- {
- "name": "Total Freight"
- },
- {
- "name": "Total Sales"
- }
- ]
- },
- {
- "name": "Product",
- "columns": [
- {
- "name": "Product SubCategory Name"
- },
- {
- "name": "Style"
- },
- {
- "name": "Model Name"
- },
- {
- "name": "Product Name"
- },
- {
- "name": "Product Start Date"
- },
- {
- "name": "Weight Unit Code"
- },
- {
- "name": "Safety Stock Level"
- },
- {
- "name": "Product Id"
- },
- {
- "name": "Standard Cost"
- },
- {
- "name": "Color"
- },
- {
- "name": "Days To Manufacture"
- },
- {
- "name": "Dealer Price"
- },
- {
- "name": "ProductKey"
- },
- {
- "name": "LargePhoto"
- },
- {
- "name": "Size"
- },
- {
- "name": "Is Finished Goods"
- },
- {
- "name": "Description"
- },
- {
- "name": "Product Line"
- },
- {
- "name": "Size Unit Code"
- },
- {
- "name": "List Price"
- },
- {
- "name": "Class"
- },
- {
- "name": "Size Range"
- },
- {
- "name": "Reorder Point"
- },
- {
- "name": "Product Status"
- },
- {
- "name": "Weight"
- },
- {
- "name": "ProductSubcategoryKey"
- },
- {
- "name": "Product Category Name"
- },
- {
- "name": "Product End Date"
- }
- ]
- },
- {
- "name": "Promotion",
- "columns": [
- {
- "name": "Promotion Name"
- },
- {
- "name": "Max Quantity"
- },
- {
- "name": "Promotion Type"
- },
- {
- "name": "Promotion Start Date"
- },
- {
- "name": "Min Quantity"
- },
- {
- "name": "Promotion Category"
- },
- {
- "name": "DiscountPct"
- },
- {
- "name": "PromotionKey"
- },
- {
- "name": "Promotion End Date"
- }
- ]
- },
- {
- "name": "Product Subcategory",
- "columns": [
- {
- "name": "Product Subcategory Name"
- },
- {
- "name": "ProductSubcategoryKey"
- },
- {
- "name": "ProductCategoryKey"
- }
- ]
- },
- {
- "name": "Employee",
- "columns": [
- {
- "name": "ParentEmployeeKey"
- },
- {
- "name": "Middle Name"
- },
- {
- "name": "NameStyle"
- },
- {
- "name": "Hire Date"
- },
- {
- "name": "Marital Status"
- },
- {
- "name": "Pay Frequency"
- },
- {
- "name": "Phone"
- },
- {
- "name": "Email"
- },
- {
- "name": "Gender"
- },
- {
- "name": "Vacation Hours"
- },
- {
- "name": "Employee Id"
- },
- {
- "name": "Is Current"
- },
- {
- "name": "Login"
- },
- {
- "name": "First Name"
- },
- {
- "name": "Is Salaried"
- },
- {
- "name": "Base Rate"
- },
- {
- "name": "Birth Date"
- },
- {
- "name": "Sick Leave Hours"
- },
- {
- "name": "Last Name"
- },
- {
- "name": "SalesTerritoryKey"
- },
- {
- "name": "Status"
- },
- {
- "name": "Emergency Contact Name"
- },
- {
- "name": "Title"
- },
- {
- "name": "Department Name"
- },
- {
- "name": "Emergency Contact Phone"
- },
- {
- "name": "EmployeeKey"
- },
- {
- "name": "End Date"
- },
- {
- "name": "Is Sales Person"
- },
- {
- "name": "Employee Photo"
- },
- {
- "name": "Start Date"
- }
- ]
- },
- {
- "name": "Geography",
- "columns": [
- {
- "name": "City"
- },
- {
- "name": "State Province Name"
- },
- {
- "name": "Country Region Code"
- },
- {
- "name": "State Province Code"
- },
- {
- "name": "SalesTerritoryKey"
- },
- {
- "name": "GeographyKey"
- },
- {
- "name": "Country Region Name"
- },
- {
- "name": "Postal Code"
- }
- ]
- },
- {
- "name": "Reseller",
- "columns": [
- {
- "name": "Year Opened"
- },
- {
- "name": "Order Month"
- },
- {
- "name": "Business Type"
- },
- {
- "name": "Annual Sales"
- },
- {
- "name": "Number Employees"
- },
- {
- "name": "Reseller Id"
- },
- {
- "name": "Address Line 2"
- },
- {
- "name": "GeographyKey"
- },
- {
- "name": "Reseller Phone"
- },
- {
- "name": "ResellerKey"
- },
- {
- "name": "Min Payment Type"
- },
- {
- "name": "Address Line 1"
- },
- {
- "name": "Bank Name"
- },
- {
- "name": "Annua Revenue"
- },
- {
- "name": "Reseller Name"
- },
- {
- "name": "Min Payment Amount"
- },
- {
- "name": "Product Line"
- },
- {
- "name": "Last Order Year"
- },
- {
- "name": "First Order Year"
- },
- {
- "name": "Order Frequency"
- }
- ]
- },
- {
- "name": "Sales Quota",
- "columns": [
- {
- "name": "Calendar Quarter"
- },
- {
- "name": "Sales Amount Quota"
- },
- {
- "name": "Calendar Year"
- },
- {
- "name": "Date"
- },
- {
- "name": "DateKey"
- },
- {
- "name": "EmployeeKey"
- },
- {
- "name": "SalesQuotaKey"
- }
- ]
- },
- {
- "name": "Currency",
- "columns": [
- {
- "name": "CurrencyKey"
- },
- {
- "name": "Currency Code"
- },
- {
- "name": "CurrencyName"
- }
- ]
- },
- {
- "name": "Product Category",
- "columns": [
- {
- "name": "Product Category Name"
- },
- {
- "name": "ProductCategoryKey"
- }
- ]
- }
- ]
- }
- ],
- "roles": [
- {
- "name": "Users",
- "description": "All allowed users to query the model",
- "modelPermission": "read"
- },
- {
- "name": "Admins",
- "description": "All administrators",
- "modelPermission": "administrator"
- },
- {
- "name": "Analysts",
- "description": "All users responsible for the status of the model",
- "modelPermission": "readRefresh"
- },
- {
- "name": "Operators",
- "description": "All users responsible for updating the data",
- "modelPermission": "refresh"
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/App.config b/AsPartitionProcessing/AsPartitionProcessing.SampleClient/App.config
deleted file mode 100644
index 624d5ce..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/App.config
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
-
-
- AsPartitionProcessing
-
-
- True
-
-
-
-
diff --git a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/AsPartitionProcessing.SampleClient.csproj b/AsPartitionProcessing/AsPartitionProcessing.SampleClient/AsPartitionProcessing.SampleClient.csproj
deleted file mode 100644
index 62ae3f1..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/AsPartitionProcessing.SampleClient.csproj
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}
- Exe
- Properties
- AsPartitionProcessing.SampleClient
- AsPartitionProcessing.SampleClient
- v4.5.2
- 512
- true
-
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
-
- False
- ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.AnalysisServices.DLL
-
-
- False
- ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.AnalysisServices.Core.DLL
-
-
- False
- ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.AnalysisServices.Tabular.DLL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
- True
- Settings.settings
-
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
- {fb937281-b06d-47fb-9846-e97b0287afce}
- AsPartitionProcessing
-
-
-
-
-
\ No newline at end of file
diff --git a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Program.cs b/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Program.cs
deleted file mode 100644
index c502994..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Program.cs
+++ /dev/null
@@ -1,234 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.AnalysisServices.Tabular;
-
-
-namespace AsPartitionProcessing.SampleClient
-{
- class Program
- {
- const bool UseDatabase = false;
-
- static void Main(string[] args)
- {
- try
- {
- List modelsConfig;
- if (!UseDatabase)
- {
- modelsConfig = InitializeAdventureWorksInline();
- }
- else
- {
- modelsConfig = InitializeFromDatabase();
- }
-
- foreach (PartitionedModelConfig modelConfig in modelsConfig)
- {
- if (!modelConfig.IntegratedAuth) //For Azure AS
- {
- Console.WriteLine();
- Console.Write("User name for AS server: ");
- modelConfig.UserName = Console.ReadLine();
- Console.Write("Password for AS server: ");
- modelConfig.Password = ReadPassword();
- }
-
- //Most important method:
- PartitionProcessor.PerformProcessing(modelConfig, LogMessage);
- }
- }
- catch (Exception exc)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine();
- Console.WriteLine(exc.Message, null);
- }
-
- Console.WriteLine("Press any key to exit.");
- Console.ReadKey();
- }
-
- private static List InitializeAdventureWorksInline()
- {
- PartitionedModelConfig partitionedModel = new PartitionedModelConfig(
- partitionedModelConfigID: 1,
- analysisServicesServer: "localhost",
- analysisServicesDatabase: "AdventureWorks",
- initialSetUp: true,
- incrementalOnline: true,
- incrementalParallelTables: true,
- integratedAuth: true,
- userName: "",
- password: "",
- partitionedTables:
- new List
- {
- new PartitionedTableConfig(
- partitionedTableConfigID: 1,
- maxDate: Convert.ToDateTime("2012-12-01"),
- granularity: Granularity.Monthly,
- numberOfPartitionsFull: 12,
- numberOfPartitionsForIncrementalProcess: 3,
- analysisServicesTable: "Internet Sales",
- sourceTableName: "[dbo].[FactInternetSales]",
- sourcePartitionColumn: "OrderDateKey"
- ),
- new PartitionedTableConfig(
- partitionedTableConfigID: 2,
- maxDate: Convert.ToDateTime("2012-12-01"),
- granularity: Granularity.Yearly,
- numberOfPartitionsFull: 3,
- numberOfPartitionsForIncrementalProcess: 1,
- analysisServicesTable: "Reseller Sales",
- sourceTableName: "[dbo].[FactResellerSales]",
- sourcePartitionColumn: "OrderDateKey"
- )
- }
- );
-
- #region Not needed as sample includes pre-prepared version of AdventureWorks
-
- ////This section not to be used normally - just to get started with AdventureWorks. It removes existing partitions that come in AdventureWorks and creates a template one to align with assumptions listed at top of PartitionProcessor.cs file.
- //if (partitionedModel.InitialSetUp)
- //{
- // Console.WriteLine("Initialize AdventureWorks template partitions? [y/n]");
- // if (Console.ReadLine().ToLower() == "y")
- // InitializeAdventureWorksDatabase(partitionedModel);
- //}
-
- #endregion
-
- return new List { partitionedModel };
- }
-
- private static List InitializeFromDatabase()
- {
- ConfigDatabaseConnectionInfo connectionInfo = new ConfigDatabaseConnectionInfo();
-
- connectionInfo.Server = Settings.Default.ConfigServer;
- connectionInfo.Database = Settings.Default.ConfigDatabase;
- connectionInfo.IntegratedAuth = Settings.Default.ConfigDatabaseIntegratedAuth;
-
- if (!Settings.Default.ConfigDatabaseIntegratedAuth)
- {
- Console.Write("User name for config database: ");
- connectionInfo.UserName = Console.ReadLine();
- Console.Write("Password for config database: ");
- connectionInfo.Password = ReadPassword();
- }
-
- return ConfigDatabaseHelper.ReadConfig(connectionInfo);
- }
-
- private static void LogMessage(string message, PartitionedModelConfig partitionedModel)
- {
- //Can provide custom logger here
- try
- {
- if (UseDatabase)
- ConfigDatabaseHelper.LogMessage(message, partitionedModel);
-
- Console.WriteLine(message);
- }
- catch (Exception exc)
- {
- Console.WriteLine(exc.Message);
- Console.WriteLine("Press any key to exit.");
- Console.ReadKey();
- Environment.Exit(0); //Avoid recursion if errored connecting to db
- }
- }
-
- public static string ReadPassword()
- {
- string password = "";
- ConsoleKeyInfo info = Console.ReadKey(true);
- while (info.Key != ConsoleKey.Enter)
- {
- if (info.Key != ConsoleKey.Backspace)
- {
- Console.Write("*");
- password += info.KeyChar;
- }
- else if (info.Key == ConsoleKey.Backspace)
- {
- if (!string.IsNullOrEmpty(password))
- {
- // remove one character from the list of password characters
- password = password.Substring(0, password.Length - 1);
- // get the location of the cursor
- int pos = Console.CursorLeft;
- // move the cursor to the left by one character
- Console.SetCursorPosition(pos - 1, Console.CursorTop);
- // replace it with space
- Console.Write(" ");
- // move the cursor to the left by one character again
- Console.SetCursorPosition(pos - 1, Console.CursorTop);
- }
- }
- info = Console.ReadKey(true);
- }
- // add a new line because user pressed enter at the end of password
- Console.WriteLine();
- return password;
- }
-
- #region Not needed as sample includes pre-prepared version of AdventureWorks
-
- private static void InitializeAdventureWorksDatabase(PartitionedModelConfig parameters)
- {
- //In order to align with assumptions listed in PartitionProcessor.cs, need to:
- //1. Delete existing partitions in InternetSales and ResellerSales
- //2. Create template partition (again, see comments at top of PartitionProcessor.cs)
-
- Console.WriteLine("Initializing AdventureWorks ...");
-
- using (Server server = new Server())
- {
- //Connect and get main objects
- string serverConnectionString;
- if (parameters.IntegratedAuth)
- serverConnectionString = $"Provider=MSOLAP;Data Source={parameters.AnalysisServicesServer};";
- else
- {
- serverConnectionString = $"Provider=MSOLAP;Data Source={parameters.AnalysisServicesServer};User ID={parameters.UserName};Password={parameters.Password};Persist Security Info=True;Impersonation Level=Impersonate;";
- }
- server.Connect(serverConnectionString);
-
- Database database = server.Databases.FindByName(parameters.AnalysisServicesDatabase);
- if (database == null)
- {
- throw new Microsoft.AnalysisServices.ConnectionException($"Could not connect to database {parameters.AnalysisServicesDatabase}.");
- }
-
- InitializeAdventureWorksTable(database, "Internet Sales", "[dbo].[FactInternetSales]");
- InitializeAdventureWorksTable(database, "Reseller Sales", "[dbo].[FactResellerSales]");
-
- database.Update(Microsoft.AnalysisServices.UpdateOptions.ExpandFull);
- server.Disconnect();
- }
- }
-
- private static void InitializeAdventureWorksTable(Database database, string analysisServicesTableName, string sourceFactTableName)
- {
- Table table = database.Model.Tables.Find(analysisServicesTableName);
- if (table == null)
- {
- throw new Microsoft.AnalysisServices.ConnectionException($"Could not connect to table {analysisServicesTableName}.");
- }
- table.Partitions.Clear();
- Partition templatePartition = new Partition();
- templatePartition.Name = analysisServicesTableName;
- table.Partitions.Add(templatePartition);
- templatePartition.Source = new QueryPartitionSource()
- {
- DataSource = database.Model.DataSources[0], //Assuming this is only data source (SqlServer localhost)
- Query = $"SELECT * FROM {sourceFactTableName}"
- };
- }
-
- #endregion
- }
-}
-
diff --git a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Properties/AssemblyInfo.cs b/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Properties/AssemblyInfo.cs
deleted file mode 100644
index 652f509..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-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("AsPartitionProcessing.SampleClient")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Microsoft Corporation")]
-[assembly: AssemblyProduct("AsPartitionProcessing.SampleClient")]
-[assembly: AssemblyCopyright("Copyright © Microsoft Corporation 2016")]
-[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("c45b329d-f606-4f89-a41a-785c247f24b2")]
-
-// 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/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Settings.Designer.cs b/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Settings.Designer.cs
deleted file mode 100644
index 15ddb4b..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Settings.Designer.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace AsPartitionProcessing.SampleClient {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("localhost")]
- public string ConfigServer {
- get {
- return ((string)(this["ConfigServer"]));
- }
- set {
- this["ConfigServer"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("AsPartitionProcessing")]
- public string ConfigDatabase {
- get {
- return ((string)(this["ConfigDatabase"]));
- }
- set {
- this["ConfigDatabase"] = value;
- }
- }
-
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("True")]
- public bool ConfigDatabaseIntegratedAuth {
- get {
- return ((bool)(this["ConfigDatabaseIntegratedAuth"]));
- }
- set {
- this["ConfigDatabaseIntegratedAuth"] = value;
- }
- }
- }
-}
diff --git a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Settings.settings b/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Settings.settings
deleted file mode 100644
index 14e4cff..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.SampleClient/Settings.settings
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
- localhost
-
-
- AsPartitionProcessing
-
-
- True
-
-
-
\ No newline at end of file
diff --git a/AsPartitionProcessing/AsPartitionProcessing.sln b/AsPartitionProcessing/AsPartitionProcessing.sln
deleted file mode 100644
index af53563..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing.sln
+++ /dev/null
@@ -1,73 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsPartitionProcessing", "AsPartitionProcessing\AsPartitionProcessing.csproj", "{FB937281-B06D-47FB-9846-E97B0287AFCE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsPartitionProcessing.SampleClient", "AsPartitionProcessing.SampleClient\AsPartitionProcessing.SampleClient.csproj", "{C45B329D-F606-4F89-A41A-785C247F24B2}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0B23151E-8A6B-44AA-B670-797D1EB8B3C0}"
- ProjectSection(SolutionItems) = preProject
- AdventureWorksDW.bak = AdventureWorksDW.bak
- CreateDatabaseObjects.sql = CreateDatabaseObjects.sql
- SampleConfiguration.sql = SampleConfiguration.sql
- EndProjectSection
-EndProject
-Project("{6870E480-7721-4708-BFB8-9AE898AA21B3}") = "AsPartitionProcessing.AdventureWorks", "AsPartitionProcessing.AdventureWorks\AsPartitionProcessing.AdventureWorks.smproj", "{7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}"
-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
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Debug|x86.ActiveCfg = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Debug|x86.Build.0 = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Development|Any CPU.ActiveCfg = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Development|Any CPU.Build.0 = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Development|x86.ActiveCfg = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Development|x86.Build.0 = Debug|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Release|Any CPU.Build.0 = Release|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Release|x86.ActiveCfg = Release|Any CPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}.Release|x86.Build.0 = Release|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Debug|x86.ActiveCfg = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Debug|x86.Build.0 = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Development|Any CPU.ActiveCfg = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Development|Any CPU.Build.0 = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Development|x86.ActiveCfg = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Development|x86.Build.0 = Debug|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Release|Any CPU.Build.0 = Release|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Release|x86.ActiveCfg = Release|Any CPU
- {C45B329D-F606-4F89-A41A-785C247F24B2}.Release|x86.Build.0 = Release|Any CPU
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Debug|Any CPU.ActiveCfg = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Debug|Any CPU.Build.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Debug|Any CPU.Deploy.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Debug|x86.ActiveCfg = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Debug|x86.Build.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Debug|x86.Deploy.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Development|Any CPU.ActiveCfg = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Development|x86.ActiveCfg = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Development|x86.Build.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Development|x86.Deploy.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Release|Any CPU.ActiveCfg = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Release|Any CPU.Build.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Release|Any CPU.Deploy.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Release|x86.ActiveCfg = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Release|x86.Build.0 = Development|x86
- {7274EFCC-E7DF-40AD-83DF-1DFD5B954E67}.Release|x86.Deploy.0 = Development|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/AsPartitionProcessing/AsPartitionProcessing/AsPartitionProcessing.csproj b/AsPartitionProcessing/AsPartitionProcessing/AsPartitionProcessing.csproj
deleted file mode 100644
index 27dc10a..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/AsPartitionProcessing.csproj
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {FB937281-B06D-47FB-9846-E97B0287AFCE}
- Library
- Properties
- AsPartitionProcessing
- AsPartitionProcessing
- v4.5.2
- 512
-
-
-
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
- bin\Release\AsPartitionProcessing.XML
-
-
-
- False
- ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.AnalysisServices.DLL
-
-
- False
- ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.AnalysisServices.Core.DLL
-
-
- False
- ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.AnalysisServices.Tabular.DLL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/AsPartitionProcessing/AsPartitionProcessing/AsPartitionProcessing.sln b/AsPartitionProcessing/AsPartitionProcessing/AsPartitionProcessing.sln
new file mode 100644
index 0000000..7d3f126
--- /dev/null
+++ b/AsPartitionProcessing/AsPartitionProcessing/AsPartitionProcessing.sln
@@ -0,0 +1,10 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Global
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/AsPartitionProcessing/AsPartitionProcessing/ConfigDatabaseConnectionInfo.cs b/AsPartitionProcessing/AsPartitionProcessing/ConfigDatabaseConnectionInfo.cs
deleted file mode 100644
index 879d99a..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/ConfigDatabaseConnectionInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-
-namespace AsPartitionProcessing
-{
- ///
- /// Information required to connect to the configuration and logging database.
- ///
- public class ConfigDatabaseConnectionInfo
- {
- ///
- /// Database server name.
- ///
- public string Server { get; set; }
-
- ///
- /// Name of the database.
- ///
- public string Database { get; set; }
-
- ///
- /// User name used for connection.
- ///
- public string UserName { get; set; }
-
- ///
- /// Password used for connection.
- ///
- public string Password { get; set; }
-
- ///
- /// Whether connection to be made using integrated authentication or SQL authentication.
- ///
- public bool IntegratedAuth { get; set; }
- }
-}
diff --git a/AsPartitionProcessing/AsPartitionProcessing/ConfigDatabaseHelper.cs b/AsPartitionProcessing/AsPartitionProcessing/ConfigDatabaseHelper.cs
deleted file mode 100644
index 07a772c..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/ConfigDatabaseHelper.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-using System;
-using System.Data;
-using System.Data.SqlClient;
-using System.Collections.Generic;
-
-namespace AsPartitionProcessing
-{
- ///
- /// Class containing helper methods for reading and writing to the configuration and logging database.
- ///
- public static class ConfigDatabaseHelper
- {
- ///
- /// Read configuration information from the database.
- ///
- /// Information required to connect to the configuration and logging database.
- /// Collection of partitioned models with configuration information.
- public static List ReadConfig(ConfigDatabaseConnectionInfo connectionInfo)
- {
- using (SqlConnection connection = new SqlConnection(GetConnectionString(connectionInfo)))
- {
- connection.Open();
- using (SqlCommand command = new SqlCommand())
- {
- command.Connection = connection;
- command.CommandType = CommandType.Text;
- command.CommandText = @"
- SELECT [PartitionedModelConfigID]
- ,[AnalysisServicesServer]
- ,[AnalysisServicesDatabase]
- ,[InitialSetUp]
- ,[IncrementalOnline]
- ,[IncrementalParallelTables]
- ,[IntegratedAuth]
- ,[PartitionedTableConfigID]
- ,[MaxDate]
- ,[Granularity]
- ,[NumberOfPartitionsFull]
- ,[NumberOfPartitionsForIncrementalProcess]
- ,[AnalysisServicesTable]
- ,[SourceTableName]
- ,[SourcePartitionColumn]
- FROM [dbo].[vPartitionedTableConfig]
- ORDER BY [PartitionedModelConfigID], [PartitionedTableConfigID];";
-
- List models = new List();
- PartitionedModelConfig modelConfig = null;
- int currentPartitionedModelConfigID = -1;
-
- SqlDataReader reader = command.ExecuteReader();
- while (reader.Read())
- {
- if (modelConfig == null || currentPartitionedModelConfigID != Convert.ToInt32(reader["PartitionedModelConfigID"]))
- {
- modelConfig = new PartitionedModelConfig();
- modelConfig.PartitionedTables = new List();
- models.Add(modelConfig);
-
- modelConfig.PartitionedModelConfigID = Convert.ToInt32(reader["PartitionedModelConfigID"]);
- modelConfig.AnalysisServicesServer = Convert.ToString(reader["AnalysisServicesServer"]);
- modelConfig.AnalysisServicesDatabase = Convert.ToString(reader["AnalysisServicesDatabase"]);
- modelConfig.InitialSetUp = Convert.ToBoolean(reader["InitialSetUp"]);
- modelConfig.IncrementalOnline = Convert.ToBoolean(reader["IncrementalOnline"]);
- modelConfig.IncrementalParallelTables = Convert.ToBoolean(reader["IncrementalParallelTables"]);
- modelConfig.IntegratedAuth = Convert.ToBoolean(reader["IntegratedAuth"]);
- modelConfig.ConfigDatabaseConnectionInfo = connectionInfo;
-
- currentPartitionedModelConfigID = modelConfig.PartitionedModelConfigID;
- }
-
- modelConfig.PartitionedTables.Add(
- new PartitionedTableConfig(
- Convert.ToInt32(reader["PartitionedTableConfigID"]),
- Convert.ToDateTime(reader["MaxDate"]),
- (Granularity)Convert.ToInt32(reader["Granularity"]),
- Convert.ToInt32(reader["NumberOfPartitionsFull"]),
- Convert.ToInt32(reader["NumberOfPartitionsForIncrementalProcess"]),
- Convert.ToString(reader["AnalysisServicesTable"]),
- Convert.ToString(reader["SourceTableName"]),
- Convert.ToString(reader["SourcePartitionColumn"])
- )
- );
- }
-
- return models;
- }
- }
- }
-
- ///
- /// Delete all existing logs from the database. Useful in demo scenarios to initialize the database.
- ///
- /// Information required to connect to the configuration and logging database.
- public static void ClearLogTable(ConfigDatabaseConnectionInfo connectionInfo)
- {
- using (var connection = new SqlConnection(GetConnectionString(connectionInfo)))
- {
- connection.Open();
- using (var command = new SqlCommand())
- {
- command.Connection = connection;
- command.CommandType = CommandType.Text;
- command.CommandText = "DELETE FROM [dbo].[PartitionedModelLog];";
- command.ExecuteNonQuery();
- }
- }
- }
-
- ///
- /// Log a message to the databsae.
- ///
- /// Message to be logged.
- /// Partitioned model with configuration information.
- public static void LogMessage(string message, PartitionedModelConfig partitionedModel)
- {
- using (var connection = new SqlConnection(GetConnectionString(partitionedModel.ConfigDatabaseConnectionInfo)))
- {
- connection.Open();
- using (var command = new SqlCommand())
- {
- command.Connection = connection;
- command.CommandType = CommandType.Text;
- command.CommandText = @"
- INSERT INTO [dbo].[PartitionedModelLog]
- ([PartitionedModelConfigID]
- ,[ExecutionID]
- ,[LogDateTime]
- ,[Message])
- VALUES
- (@PartitionedModelConfigID
- ,@ExecutionID
- ,@LogDateTime
- ,@Message);";
-
- SqlParameter parameter;
-
- parameter = new SqlParameter("@PartitionedModelConfigID", SqlDbType.Int);
- parameter.Value = partitionedModel.PartitionedModelConfigID;
- command.Parameters.Add(parameter);
-
- parameter = new SqlParameter("@ExecutionID", SqlDbType.Char, 36);
- parameter.Value = partitionedModel.ExecutionID;
- command.Parameters.Add(parameter);
-
- parameter = new SqlParameter("@LogDateTime", SqlDbType.DateTime);
- parameter.Value = DateTime.Now;
- command.Parameters.Add(parameter);
-
- parameter = new SqlParameter("@Message", SqlDbType.VarChar, 4000);
- parameter.Value = message;
- command.Parameters.Add(parameter);
-
- command.ExecuteNonQuery();
- }
- }
- }
-
- private static string GetConnectionString(ConfigDatabaseConnectionInfo connectionInfo)
- {
- string connectionString;
- if (connectionInfo.IntegratedAuth)
- {
- connectionString = $"Server={connectionInfo.Server};Database={connectionInfo.Database};Integrated Security=SSPI;";
- }
- else
- {
- connectionString = $"Server={connectionInfo.Server};Database={connectionInfo.Database};User ID={connectionInfo.UserName};Password={connectionInfo.Password};";
- }
-
- return connectionString;
- }
- }
-}
diff --git a/AsPartitionProcessing/AsPartitionProcessing/LogMessageEventArgs.cs b/AsPartitionProcessing/AsPartitionProcessing/LogMessageEventArgs.cs
deleted file mode 100644
index 772f934..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/LogMessageEventArgs.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-namespace AsPartitionProcessing
-{
- public class LogMessageEventArgs : EventArgs
- {
- public string Message { get; set; }
-
- public LogMessageEventArgs(string message)
- {
- Message = message;
- }
- }
-}
diff --git a/AsPartitionProcessing/AsPartitionProcessing/PartitionProcessor.cs b/AsPartitionProcessing/AsPartitionProcessing/PartitionProcessor.cs
deleted file mode 100644
index 8c55201..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/PartitionProcessor.cs
+++ /dev/null
@@ -1,343 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.AnalysisServices.Tabular;
-
-
-//-----------
-//ASSUMPTIONS
-//Rolling window. Removes oldest partition on increment
-//Depends on date keys in source to be integers formatted as yyyymmdd
-//Source queries take the form "SELECT * FROM WHERE FLOOR( / 100) = " (monthly)
-//Template partition exists with same name as table
-//Non-template partitions have name of the format yyyy (yearly), yyyymm (monthly), yyyymmdd (daily)
-//-----------
-
-
-namespace AsPartitionProcessing
-{
- ///
- /// Delegate to allow client to pass in a custom logging method
- ///
- /// The message to be logged
- /// Configuration info for the partitioned model
- public delegate void LogMessageDelegate(string message, PartitionedModelConfig partitionedModel);
-
- ///
- /// Processor of partitions in AS tabular models
- ///
- public static class PartitionProcessor
- {
- private static PartitionedModelConfig _partitionedModel;
- private static LogMessageDelegate _messageLogger;
-
- ///
- /// Partitions tables in a tabular model based on configuration
- ///
- /// Configuration info for the partitioned model
- /// Pointer to logging method
- public static void PerformProcessing(PartitionedModelConfig partitionedModel, LogMessageDelegate messageLogger)
- {
- _partitionedModel = partitionedModel;
- _messageLogger = messageLogger;
-
- Server server = new Server();
- try
- {
- Database database;
- Connect(server, out database);
-
- Console.ForegroundColor = ConsoleColor.White;
- LogMessage($"Start: {DateTime.Now.ToString("hh:mm:ss tt")}", false);
- LogMessage($"Server: {_partitionedModel.AnalysisServicesServer}", false);
-
- LogMessage($"Database: {_partitionedModel.AnalysisServicesDatabase}", false);
-
- foreach (PartitionedTableConfig partitionedTable in _partitionedModel.PartitionedTables)
- {
- Console.ForegroundColor = ConsoleColor.Yellow;
-
- Table table = database.Model.Tables.Find(partitionedTable.AnalysisServicesTable);
- if (table == null)
- {
- throw new Microsoft.AnalysisServices.ConnectionException($"Could not connect to table {partitionedTable.AnalysisServicesTable}.");
- }
- Partition templatePartition = table.Partitions.Find(partitionedTable.AnalysisServicesTable);
- if (templatePartition == null)
- {
- throw new Microsoft.AnalysisServices.ConnectionException($"Table {partitionedTable.AnalysisServicesTable} does not contain a partition with the same name to act as the template partition.");
- }
-
- LogMessage("", false);
- LogMessage($"Rolling-window partitioning for table {partitionedTable.AnalysisServicesTable}", false);
- LogMessage(new String('-', partitionedTable.AnalysisServicesTable.Length + 38), false);
-
- //Figure out what processing needs to be done
- List partitionKeysCurrent = GetPartitionKeysTable(table, partitionedTable.Granularity);
- List partitionKeysNew = GetPartitionKeys(false, partitionedTable, partitionedTable.Granularity);
- List partitionKeysForProcessing = GetPartitionKeys(true, partitionedTable, partitionedTable.Granularity);
- DisplayPartitionRange(partitionKeysCurrent, true, partitionedTable.Granularity);
- DisplayPartitionRange(partitionKeysNew, false, partitionedTable.Granularity);
- LogMessage("", false);
- LogMessage("=>Actions & progress:", false);
-
- //Check for old partitions that need to be removed
- foreach (string partitionKey in partitionKeysCurrent)
- {
- if (Convert.ToInt32(partitionKey) < Convert.ToInt32(partitionKeysNew[0]))
- {
- LogMessage($"Remove old partition {DateFormatPartitionKey(partitionKey, partitionedTable.Granularity)}", true);
- table.Partitions.Remove(partitionKey);
- }
- }
-
- //Process partitions
- string selectQueryTemplate;
- switch (partitionedTable.Granularity)
- {
- case Granularity.Daily:
- selectQueryTemplate = "SELECT * FROM {0} WHERE {1} = {2} ORDER BY {1}";
- break;
- case Granularity.Monthly:
- selectQueryTemplate = "SELECT * FROM {0} WHERE FLOOR({1} / 100) = {2} ORDER BY {1}";
- break;
- default: //Granularity.Yearly:
- selectQueryTemplate = "SELECT * FROM {0} WHERE FLOOR({1} / 10000) = {2} ORDER BY {1}";
- break;
- }
-
- foreach (string partitionKey in partitionKeysForProcessing)
- {
- Partition partitionToProcess = table.Partitions.Find(partitionKey);
-
- if (partitionToProcess == null)
- {
- //Doesn't exist so create it
- partitionToProcess = new Partition();
- templatePartition.CopyTo(partitionToProcess);
- partitionToProcess.Name = partitionKey;
- ((QueryPartitionSource)partitionToProcess.Source).Query = String.Format(selectQueryTemplate, partitionedTable.SourceTableName, partitionedTable.SourcePartitionColumn, partitionKey);
- table.Partitions.Add(partitionToProcess);
- LogMessage($"Create new partition {DateFormatPartitionKey(partitionKey, partitionedTable.Granularity)}", true);
-
- if (!_partitionedModel.InitialSetUp)
- {
- IncrementalProcessPartition(partitionKey, partitionToProcess, partitionedTable.Granularity);
- }
- }
- else if (!_partitionedModel.InitialSetUp)
- {
- //Existing partition for processing
- IncrementalProcessPartition(partitionKey, partitionToProcess, partitionedTable.Granularity);
- }
-
- if (_partitionedModel.InitialSetUp)
- {
- if (partitionToProcess.State != ObjectState.Ready)
- {
- //Process new partitions sequentially during initial setup so don't run out of memory
- LogMessage($"Sequentially process {DateFormatPartitionKey(partitionKey, partitionedTable.Granularity)} /DataOnly", true);
- partitionToProcess.RequestRefresh(RefreshType.DataOnly);
- database.Model.SaveChanges();
- }
- else
- {
- //Partition already exists during initial setup (and is fully processed), so ignore it
- LogMessage($"Partition {DateFormatPartitionKey(partitionKey, partitionedTable.Granularity)} already exists and is processed", true);
- }
- }
- }
-
- //Ensure template partition doesn't contain any data
- if (_partitionedModel.InitialSetUp)
- {
- ((QueryPartitionSource)templatePartition.Source).Query = String.Format("SELECT * FROM {0} WHERE 0=1", partitionedTable.SourceTableName);
- templatePartition.RequestRefresh(RefreshType.DataOnly);
- }
-
- //If processing tables sequentially (but all partitions being done in parallel), then save changes now
- if (!_partitionedModel.IncrementalParallelTables)
- {
- LogMessage($"Save changes for table {partitionedTable.AnalysisServicesTable} ...", true);
- database.Model.SaveChanges();
- }
- }
-
- //Commit the data changes, and bring model back online if necessary
-
- LogMessage("", false);
- LogMessage("Final operations", false);
- LogMessage(new String('-', 16), false);
-
- if (_partitionedModel.IncrementalParallelTables)
- {
- LogMessage("Save changes ...", true);
- database.Model.SaveChanges();
- }
-
- if (_partitionedModel.InitialSetUp || (!_partitionedModel.InitialSetUp && !_partitionedModel.IncrementalOnline))
- {
- LogMessage("Recalc model to bring back online ...", true);
-
- database.Model.RequestRefresh(RefreshType.Calculate);
- database.Model.SaveChanges();
- }
-
- Console.ForegroundColor = ConsoleColor.White;
- LogMessage("", false);
- LogMessage("Finish: " + DateTime.Now.ToString("hh:mm:ss tt"), false);
- }
- catch (Exception exc)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- LogMessage("", false);
- LogMessage($"Exception occurred: {DateTime.Now.ToString("hh:mm:ss tt")}", false);
- LogMessage($"Exception message: {exc.Message}", false);
- LogMessage($"Inner exception message: {exc.InnerException.Message}", false);
- }
- finally
- {
- try
- {
- _partitionedModel = null;
- _messageLogger = null;
- if (server != null) server.Disconnect();
- }
- catch { }
- }
- }
-
- private static void IncrementalProcessPartition(string partitionKey, Partition partitionToProcess, Granularity granularity)
- {
- if (_partitionedModel.IncrementalOnline)
- {
- LogMessage($"Parallel process partition {DateFormatPartitionKey(partitionKey, granularity)} /Full", true);
- partitionToProcess.RequestRefresh(RefreshType.Full);
- }
- else
- {
- LogMessage($"Parallel process partition {DateFormatPartitionKey(partitionKey, granularity)} /DataOnly", true);
- partitionToProcess.RequestRefresh(RefreshType.DataOnly);
- }
- }
-
- private static void LogMessage(string message, bool indented)
- {
- _messageLogger($"{(indented ? new String(' ', 3) : "")}{message}", _partitionedModel);
- }
-
- private static string DateFormatPartitionKey(string partitionKey, Granularity granularity)
- {
- string returnVal = partitionKey.Substring(0, 4);
-
- try
- {
- if (granularity == Granularity.Monthly || granularity == Granularity.Daily)
- {
- returnVal += "-" + partitionKey.Substring(4, 2);
- }
-
- if (granularity == Granularity.Daily)
- {
- returnVal += "-" + partitionKey.Substring(6, 2);
- }
- }
- catch (ArgumentOutOfRangeException exc)
- {
- throw new InvalidOperationException($"Failed to derive date from partition key. Check the key {partitionKey} matches {Convert.ToString(granularity)} granularity.");
- }
-
- return returnVal;
- }
-
- private static void DisplayPartitionRange(List partitionKeys, bool current, Granularity granularity)
- {
- LogMessage("", false);
-
- if (partitionKeys.Count > 0)
- {
- LogMessage($"=>{(current ? "Current" : "New")} partition range ({Convert.ToString(granularity)}):", false);
- LogMessage($"MIN partition: {DateFormatPartitionKey(partitionKeys[0], granularity)}", true);
- LogMessage($"MAX partition: {DateFormatPartitionKey(partitionKeys[partitionKeys.Count - 1], granularity)}", true);
- LogMessage($"Partition count: {partitionKeys.Count}", true);
- }
- else
- {
- LogMessage("=>Table not yet partitioned", false);
- }
- }
-
- private static void Connect(Server server, out Database database)
- {
- //Connect and get main objects
- string serverConnectionString;
- if (_partitionedModel.IntegratedAuth)
- serverConnectionString = $"Provider=MSOLAP;Data Source={_partitionedModel.AnalysisServicesServer};";
- else
- {
- serverConnectionString = $"Provider=MSOLAP;Data Source={_partitionedModel.AnalysisServicesServer};User ID={_partitionedModel.UserName};Password={_partitionedModel.Password};Persist Security Info=True;Impersonation Level=Impersonate;";
- }
- server.Connect(serverConnectionString);
-
- database = server.Databases.FindByName(_partitionedModel.AnalysisServicesDatabase);
- if (database == null)
- {
- throw new Microsoft.AnalysisServices.ConnectionException($"Could not connect to database {_partitionedModel.AnalysisServicesDatabase}.");
- }
- }
-
- private static List GetPartitionKeys(bool forProcessing, PartitionedTableConfig partitionedTable, Granularity granularity)
- {
- //forProcessing: false to return complete target set of partitions, true to return partitons to be processed (may be less if incremental mode).
-
- List partitionKeys = new List();
- int numberOfPartitions = (forProcessing && !_partitionedModel.InitialSetUp ? partitionedTable.NumberOfPartitionsForIncrementalProcess : partitionedTable.NumberOfPartitionsFull);
-
- for (int i = numberOfPartitions - 1; i >= 0; i--)
- {
- DateTime periodToAdd;
- switch (granularity)
- {
- case Granularity.Daily:
- periodToAdd = partitionedTable.MaxDate.AddDays(-i);
- partitionKeys.Add(Convert.ToString((periodToAdd.Year * 100 + periodToAdd.Month) * 100 + periodToAdd.Day));
- break;
- case Granularity.Monthly:
- periodToAdd = partitionedTable.MaxDate.AddMonths(-i);
- partitionKeys.Add(Convert.ToString(periodToAdd.Year * 100 + periodToAdd.Month));
- break;
- default: //Granularity.Yearly:
- periodToAdd = partitionedTable.MaxDate.AddYears(-i);
- partitionKeys.Add(Convert.ToString(periodToAdd.Year));
- break;
- }
- }
- partitionKeys.Sort();
-
- return partitionKeys;
- }
-
- private static List GetPartitionKeysTable(Table table, Granularity granularity)
- {
- List partitionKeysExisting = new List();
-
- foreach (Partition partition in table.Partitions)
- {
- //Ignore partitions that don't follow the convention yyyy, yyyymm or yyyymmdd
- int partitionKey;
- if (
- ( ( partition.Name.Length == 4 && granularity == Granularity.Yearly ) ||
- ( partition.Name.Length == 6 && granularity == Granularity.Monthly ) ||
- ( partition.Name.Length == 8 && granularity == Granularity.Daily )
- ) && int.TryParse(partition.Name, out partitionKey)
- )
- {
- partitionKeysExisting.Add(Convert.ToString(partitionKey));
- }
- }
- partitionKeysExisting.Sort();
-
- return partitionKeysExisting;
- }
- }
-}
-
diff --git a/AsPartitionProcessing/AsPartitionProcessing/PartitionedModelConfig.cs b/AsPartitionProcessing/AsPartitionProcessing/PartitionedModelConfig.cs
deleted file mode 100644
index d215a50..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/PartitionedModelConfig.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace AsPartitionProcessing
-{
- ///
- /// Configuration information for a partitioned AS tabular model.
- ///
- public class PartitionedModelConfig
- {
- ///
- /// ID of the PartitionedModelConfig table.
- ///
- public int PartitionedModelConfigID { get; set; }
-
- ///
- /// Name of the Analysis Services instance. Can be SSAS or an Azure AS URL.
- ///
- public string AnalysisServicesServer { get; set; }
-
- ///
- /// Name of the Analysis Services database.
- ///
- public string AnalysisServicesDatabase { get; set; }
-
- ///
- /// True for initial set up to create partitions and process them sequentially. False for incremental processing.
- ///
- public bool InitialSetUp { get; set; }
-
- ///
- /// When initialSetUp=false, determines if processing is performed as an online operation, which may require more memory, but users can still query the model.
- ///
- public bool IncrementalOnline { get; set; }
-
- ///
- /// When initialSetUp=false, determines if separate tables are processed in parallel. Partitions within a table are always processed in parallel.
- ///
- public bool IncrementalParallelTables { get; set; }
-
- ///
- /// Should always set to true for SSAS implementations that will run under the current process account. For Azure AS, normally set to false.
- ///
- public bool IntegratedAuth { get; set; }
-
- ///
- /// Only applies when integratedAuth=false. Used for Azure AD UPNs to connect to Azure AS.
- ///
- public string UserName { get; set; }
-
- ///
- /// Only applies when integratedAuth=false. Used for Azure AD UPNs to connect to Azure AS.
- ///
- public string Password { get; set; }
-
- ///
- /// Collection of partitioned tables containing configuration information.
- ///
- public List PartitionedTables { get; set; }
-
- ///
- /// Connection information to connect to the configuration and logging database.
- ///
- public ConfigDatabaseConnectionInfo ConfigDatabaseConnectionInfo { get; set; }
-
- ///
- /// GUID generated to the execution run.
- ///
- public string ExecutionID { get; set; }
-
- ///
- /// Parameters normally from configuration database to determine partitioning ranges and design.
- ///
- /// ID of the PartitionedModelConfig table.
- /// Name of the Analysis Services instance. Can be SSAS or an Azure AS URL.
- /// Name of the Analysis Services database.
- /// True for initial set up to create partitions and process them sequentially. False for incremental processing.
- /// When initialSetUp=false, determines if processing is performed as an online operation, which may require more memory, but users can still query the model.
- /// When initialSetUp=false, determines if separate tables are processed in parallel. Partitions within a table are always processed in parallel.
- /// Should always set to true for SSAS implementations that will run under the current process account. For Azure AS, normally set to false.
- /// Only applies when integratedAuth=false. Used for Azure AD UPNs to connect to Azure AS.
- /// Only applies when integratedAuth=false. Used for Azure AD UPNs to connect to Azure AS.
- /// Collection of partitioned tables containing configuration information.
- public PartitionedModelConfig(
- int partitionedModelConfigID,
- string analysisServicesServer,
- string analysisServicesDatabase,
- bool initialSetUp,
- bool incrementalOnline,
- bool incrementalParallelTables,
- bool integratedAuth,
- string userName,
- string password,
- List partitionedTables
- )
- {
- PartitionedModelConfigID = partitionedModelConfigID;
- AnalysisServicesServer = analysisServicesServer;
- AnalysisServicesDatabase = analysisServicesDatabase;
- InitialSetUp = initialSetUp;
- IncrementalOnline = incrementalOnline;
- IncrementalParallelTables = incrementalParallelTables;
- IntegratedAuth = integratedAuth;
- UserName = userName;
- Password = password;
- PartitionedTables = partitionedTables;
- ExecutionID = Guid.NewGuid().ToString();
- }
-
- ///
- /// Default constructor.
- ///
- public PartitionedModelConfig()
- {
- ExecutionID = Guid.NewGuid().ToString();
- }
- }
-}
diff --git a/AsPartitionProcessing/AsPartitionProcessing/PartitionedTableConfig.cs b/AsPartitionProcessing/AsPartitionProcessing/PartitionedTableConfig.cs
deleted file mode 100644
index 4783810..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/PartitionedTableConfig.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-
-namespace AsPartitionProcessing
-{
- ///
- /// Configuration information for a partitioned table within an AS tabular model.
- ///
- public class PartitionedTableConfig
- {
- ///
- /// ID of the PartitionedTableConfig table.
- ///
- public int PartitionedTableConfigID { get; set; }
-
- ///
- /// The maximum date that needs to be accounted for in the partitioned table. Represents the upper boundary of the rolling window.
- ///
- public DateTime MaxDate { get; set; }
-
- ///
- /// Partition granularity, which can be Yearly, Monthly or Daily.
- ///
- public Granularity Granularity { get; set; }
-
- ///
- /// Count of all partitions in the rolling window. For example, a rolling window of 10 years partitioned by month would result in 120 partitions.
- ///
- public int NumberOfPartitionsFull { get; set; }
-
- ///
- /// Count of “hot partitions” where the data can change. For example, it may be necessary to refresh the most recent 3 months of data every day. This only applies to the most recent partitions.
- ///
- public int NumberOfPartitionsForIncrementalProcess { get; set; }
-
- ///
- /// Name of the partitioned table in the tabular model.
- ///
- public string AnalysisServicesTable { get; set; }
-
- ///
- /// Name of the source table in the relational database.
- ///
- public string SourceTableName { get; set; }
-
- ///
- /// Name of the source column from the table in the relational database.
- ///
- public string SourcePartitionColumn { get; set; }
-
- ///
- /// Initialize configuration info for partitioned table. Normally populated from a configuration database.
- ///
- /// Parent model.
- /// ID of the PartitionedTableConfig table.
- /// The maximum date that needs to be accounted for in the partitioned table. Represents the upper boundary of the rolling window.
- /// Partition granularity, which can be Yearly, Monthly or Daily.
- /// Count of all partitions in the rolling window. For example, a rolling window of 10 years partitioned by month would result in 120 partitions.
- /// Count of “hot partitions” where the data can change. For example, it may be necessary to refresh the most recent 3 months of data every day. This only applies to the most recent partitions.
- /// Name of the partitioned table in the tabular model.
- /// Name of the source table in the relational database.
- /// Name of the source column from the table in the relational database.
- public PartitionedTableConfig(
- int partitionedTableConfigID,
- DateTime maxDate,
- Granularity granularity,
- int numberOfPartitionsFull,
- int numberOfPartitionsForIncrementalProcess,
- string analysisServicesTable,
- string sourceTableName,
- string sourcePartitionColumn
- )
- {
- PartitionedTableConfigID = partitionedTableConfigID;
- MaxDate = maxDate;
- Granularity = granularity;
- NumberOfPartitionsFull = numberOfPartitionsFull;
- NumberOfPartitionsForIncrementalProcess = numberOfPartitionsForIncrementalProcess;
- AnalysisServicesTable = analysisServicesTable;
- SourceTableName = sourceTableName;
- SourcePartitionColumn = sourcePartitionColumn;
- }
- }
-
- ///
- /// Enumeration of supported partition granularities.
- ///
- public enum Granularity
- {
- Daily = 0,
- Monthly = 1,
- Yearly = 2
- }
-}
diff --git a/AsPartitionProcessing/AsPartitionProcessing/Properties/AssemblyInfo.cs b/AsPartitionProcessing/AsPartitionProcessing/Properties/AssemblyInfo.cs
deleted file mode 100644
index 9180916..0000000
--- a/AsPartitionProcessing/AsPartitionProcessing/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-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("AsPartitionProcessing")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Microsoft Corporation")]
-[assembly: AssemblyProduct("AsPartitionProcessing")]
-[assembly: AssemblyCopyright("Copyright © Microsoft Corporation 2016")]
-[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("fb937281-b06d-47fb-9846-e97b0287afce")]
-
-// 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/AsPartitionProcessing/CreateDatabaseObjects.sql b/AsPartitionProcessing/CreateDatabaseObjects.sql
deleted file mode 100644
index 886ee1f..0000000
--- a/AsPartitionProcessing/CreateDatabaseObjects.sql
+++ /dev/null
@@ -1,87 +0,0 @@
-CREATE DATABASE [AsPartitionProcessing]
-GO
-USE [AsPartitionProcessing]
-GO
-
-CREATE TABLE [dbo].[PartitionedModelConfig](
- [PartitionedModelConfigID] [int] NOT NULL,
- [AnalysisServicesServer] [varchar](255) NOT NULL,
- [AnalysisServicesDatabase] [varchar](255) NOT NULL,
- [InitialSetUp] [bit] NOT NULL,
- [IncrementalOnline] [bit] NOT NULL,
- [IncrementalParallelTables] [bit] NOT NULL,
- [IntegratedAuth] [bit] NOT NULL,
- CONSTRAINT [PK_PartitionedDatabaseConfig] PRIMARY KEY CLUSTERED
-(
- [PartitionedModelConfigID] ASC
-)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[PartitionedTableConfig](
- [PartitionedTableConfigID] [int] NOT NULL,
- [PartitionedModelConfigID] [int] NOT NULL,
- [MaxDate] [date] NOT NULL,
- [Granularity] [tinyint] NOT NULL,
- [NumberOfPartitionsFull] [int] NOT NULL,
- [NumberOfPartitionsForIncrementalProcess] [int] NOT NULL,
- [AnalysisServicesTable] [varchar](255) NOT NULL,
- [SourceTableName] [varchar](255) NOT NULL,
- [SourcePartitionColumn] [varchar](255) NOT NULL,
- CONSTRAINT [PK_PartitionedTablesConfig] PRIMARY KEY CLUSTERED
-(
- [PartitionedTableConfigID] ASC
-)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-) ON [PRIMARY]
-GO
-
-CREATE TABLE [dbo].[PartitionedModelLog](
- [PartitionedModelLogID] [int] IDENTITY(1,1) NOT NULL,
- [PartitionedModelConfigID] [int] NOT NULL,
- [ExecutionID] [char](36) NOT NULL,
- [LogDateTime] [datetime] NOT NULL,
- [Message] [varchar](8000) NOT NULL,
- CONSTRAINT [PK_PartitionedModelLog] PRIMARY KEY CLUSTERED
-(
- [PartitionedModelLogID] ASC
-)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-) ON [PRIMARY]
-GO
-
-ALTER TABLE [dbo].[PartitionedTableConfig] WITH CHECK ADD CONSTRAINT [FK_PartitionedTableConfig_PartitionedDatabaseConfig] FOREIGN KEY([PartitionedModelConfigID])
-REFERENCES [dbo].[PartitionedModelConfig] ([PartitionedModelConfigID])
-GO
-
-ALTER TABLE [dbo].[PartitionedTableConfig] CHECK CONSTRAINT [FK_PartitionedTableConfig_PartitionedDatabaseConfig]
-GO
-
-ALTER TABLE [dbo].[PartitionedModelLog] WITH CHECK ADD CONSTRAINT [FK_PartitionedModelLog_PartitionedModelConfig] FOREIGN KEY([PartitionedModelConfigID])
-REFERENCES [dbo].[PartitionedModelConfig] ([PartitionedModelConfigID])
-GO
-
-ALTER TABLE [dbo].[PartitionedModelLog] CHECK CONSTRAINT [FK_PartitionedModelLog_PartitionedModelConfig]
-GO
-
-
-
-CREATE VIEW [dbo].[vPartitionedTableConfig]
-AS
-SELECT m.[PartitionedModelConfigID]
- ,m.[AnalysisServicesServer]
- ,m.[AnalysisServicesDatabase]
- ,m.[InitialSetUp]
- ,m.[IncrementalOnline]
- ,m.[IncrementalParallelTables]
- ,m.[IntegratedAuth]
- ,t.[PartitionedTableConfigID]
- ,t.[MaxDate]
- ,t.[Granularity]
- ,t.[NumberOfPartitionsFull]
- ,t.[NumberOfPartitionsForIncrementalProcess]
- ,t.[AnalysisServicesTable]
- ,t.[SourceTableName]
- ,t.[SourcePartitionColumn]
- FROM [dbo].[PartitionedTableConfig] t
-INNER JOIN [dbo].[PartitionedModelConfig] m ON t.[PartitionedModelConfigID] = m.[PartitionedModelConfigID]
-GO
-
diff --git a/AsPartitionProcessing/SampleConfiguration.sql b/AsPartitionProcessing/SampleConfiguration.sql
deleted file mode 100644
index 8288a74..0000000
--- a/AsPartitionProcessing/SampleConfiguration.sql
+++ /dev/null
@@ -1,34 +0,0 @@
-INSERT INTO [dbo].[PartitionedModelConfig]
-VALUES(
- 1 --[PartitionedModelConfigID]
- ,'localhost' --[AnalysisServicesServer]
- ,'AdventureWorks' --[AnalysisServicesDatabase]
- ,1 --[InitialSetUp]
- ,1 --[IncrementalOnline]
- ,1 --[IncrementalParallelTables]
- ,1 --[IntegratedAuth]
-);
-
-INSERT INTO [dbo].[PartitionedTableConfig]
-VALUES(
- 1 --[PartitionedTableConfigID]
- ,1 --[PartitionedModelConfigID]
- ,'2012-12-01' --[MaxDate]
- ,1 --[Granularity] 1=Monthly
- ,12 --[NumberOfPartitionsFull]
- ,3 --[NumberOfPartitionsForIncrementalProcess]
- ,'Internet Sales' --[AnalysisServicesTable]
- ,'[dbo].[FactInternetSales]'--[SourceTableName]
- ,'OrderDateKey' --[SourcePartitionColumn]
-),
-(
- 2 --[PartitionedTableConfigID]
- ,1 --[PartitionedModelConfigID]
- ,'2012-12-01' --[MaxDate]
- ,2 --[Granularity] 2=Yearly
- ,3 --[NumberOfPartitionsFull]
- ,1 --[NumberOfPartitionsForIncrementalProcess]
- ,'Reseller Sales' --[AnalysisServicesTable]
- ,'[dbo].[FactResellerSales]'--[SourceTableName]
- ,'OrderDateKey' --[SourcePartitionColumn]
-);
diff --git a/ConsoleApplication1/ConsoleApplication1.sln b/ConsoleApplication1/ConsoleApplication1.sln
deleted file mode 100644
index 8375db4..0000000
--- a/ConsoleApplication1/ConsoleApplication1.sln
+++ /dev/null
@@ -1,22 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication1", "ConsoleApplication1\ConsoleApplication1.csproj", "{BB466C00-5568-4224-8B39-6801A25A05BB}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {BB466C00-5568-4224-8B39-6801A25A05BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BB466C00-5568-4224-8B39-6801A25A05BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BB466C00-5568-4224-8B39-6801A25A05BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BB466C00-5568-4224-8B39-6801A25A05BB}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/ConsoleApplication1/ConsoleApplication1/App.config b/ConsoleApplication1/ConsoleApplication1/App.config
deleted file mode 100644
index 88fa402..0000000
--- a/ConsoleApplication1/ConsoleApplication1/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ConsoleApplication1/ConsoleApplication1/ConsoleApplication1.csproj b/ConsoleApplication1/ConsoleApplication1/ConsoleApplication1.csproj
deleted file mode 100644
index 6fcc0df..0000000
--- a/ConsoleApplication1/ConsoleApplication1/ConsoleApplication1.csproj
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {BB466C00-5568-4224-8B39-6801A25A05BB}
- Exe
- Properties
- ConsoleApplication1
- ConsoleApplication1
- v4.5.2
- 512
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ConsoleApplication1/ConsoleApplication1/Program.cs b/ConsoleApplication1/ConsoleApplication1/Program.cs
deleted file mode 100644
index 99abfb2..0000000
--- a/ConsoleApplication1/ConsoleApplication1/Program.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ConsoleApplication1
-{
- class Program
- {
- static void Main(string[] args)
- {
- }
- }
-}
diff --git a/ConsoleApplication1/ConsoleApplication1/Properties/AssemblyInfo.cs b/ConsoleApplication1/ConsoleApplication1/Properties/AssemblyInfo.cs
deleted file mode 100644
index b382c53..0000000
--- a/ConsoleApplication1/ConsoleApplication1/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-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("ConsoleApplication1")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Microsoft Corporation")]
-[assembly: AssemblyProduct("ConsoleApplication1")]
-[assembly: AssemblyCopyright("Copyright © Microsoft Corporation 2016")]
-[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("bb466c00-5568-4224-8b39-6801a25a05bb")]
-
-// 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")]