public string GetPreBuildWarning(Microsoft.AnalysisServices.BackEnd.DataModelingSandbox sandbox) { sandboxWrapper = new DataModelingSandboxWrapper(this); //sandbox = TabularHelpers.GetTabularSandboxFromBimFile(this, true); if (sandboxWrapper.GetSandbox() == null) { throw new Exception("Can't get Sandbox!"); } ExecInternal(true); return(null); //always return null since ExecInternal just handled it }
public override void Exec() { try { sandboxWrapper = new DataModelingSandboxWrapper(this); //sandbox = TabularHelpers.GetTabularSandboxFromBimFile(this, true); if (sandboxWrapper.GetSandbox() == null) { throw new Exception("Can't get Sandbox!"); } ExecInternal(false); } catch (System.Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace, "BIDS Helper - Error"); } }
public override void Exec() { try { UIHierarchy solExplorer = this.ApplicationObject.ToolWindows.SolutionExplorer; UIHierarchyItem hierItem = ((UIHierarchyItem)((System.Array)solExplorer.SelectedItems).GetValue(0)); //#if DENALI || SQL2014 //Microsoft.AnalysisServices.BackEnd.DataModelingSandbox _sandbox = TabularHelpers.GetTabularSandboxFromBimFile(this, true); var _sandbox = new DataModelingSandboxWrapper(this); //#else // var _sandbox = TabularHelpers.GetTabularSandboxAmoFromBimFile(this, true); //#endif var conn = _sandbox.GetSandbox().AdomdConnection; ExecSandbox(_sandbox); } catch (System.Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace, "BIDS Helper - Error"); } }
private void ExecSandbox(Microsoft.AnalysisServices.BackEnd.DataModelingSandbox sandboxParam) { var wrap = new DataModelingSandboxWrapper(sandboxParam); ExecSandbox(wrap); }
private void ExecSandbox(DataModelingSandboxWrapper sandboxParam) { try { //#if DENALI || SQL2014 sandbox = sandboxParam.GetSandbox(); //#else // sandbox = sandboxParam.GetSandboxAmo(); //#endif if (sandbox == null) { throw new Exception("Can't get Sandbox!"); } cube = sandboxParam.GetSandboxAmo().Cube; if (cube == null) { throw new Exception("The workspace database cube doesn't exist."); } bool bRestoreDisplayFolders = false; SSAS.TabularDisplayFoldersAnnotation annotationSaved = GetAnnotation(sandboxParam.GetSandbox()); if (GetPreBuildWarning(sandboxParam.GetSandbox()) != null) { if (MessageBox.Show("Some display folders have been blanked out by other editing operations. Restoring display folders may be possible except when a measures or columns have been renamed.\r\n\r\nWould you like BIDS Helper to attempt restore the display folders now?", "BIDS Helper Tabular Display Folders", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { bRestoreDisplayFolders = true; } } SSAS.TabularDisplayFolderWindow form = new SSAS.TabularDisplayFolderWindow(); List <BIDSHelper.SSAS.TabularDisplayFolder> displayFolders = new List <BIDSHelper.SSAS.TabularDisplayFolder>(); Dictionary <string, string> restrictions = new Dictionary <string, string>(); restrictions.Add("CUBE_NAME", cube.Name); DataSet datasetMeasures = sandboxParam.GetSchemaDataSet("MDSCHEMA_MEASURES", restrictions); Database db = cube.Parent; foreach (Dimension d in db.Dimensions) { foreach (DimensionAttribute da in d.Attributes) { if (da.Type != AttributeType.RowNumber && da.AttributeHierarchyVisible) { if (bRestoreDisplayFolders && string.IsNullOrEmpty(da.AttributeHierarchyDisplayFolder)) { SSAS.TabularDisplayFolderAnnotation a = annotationSaved.Find(da); if (a != null) { da.AttributeHierarchyDisplayFolder = a.DisplayFolder; } } displayFolders.Add(new BIDSHelper.SSAS.TabularDisplayFolder(d.Name, da)); } } foreach (Hierarchy h in d.Hierarchies) { if (bRestoreDisplayFolders && string.IsNullOrEmpty(h.DisplayFolder)) { SSAS.TabularDisplayFolderAnnotation a = annotationSaved.Find(h); if (a != null) { h.DisplayFolder = a.DisplayFolder; } } displayFolders.Add(new BIDSHelper.SSAS.TabularDisplayFolder(d.Name, h)); } } foreach (Cube c in db.Cubes) { foreach (MdxScript mdx in c.MdxScripts) { foreach (CalculationProperty calc in mdx.CalculationProperties) { if (calc.Visible && !calc.CalculationReference.StartsWith("KPIs.")) //TODO: display folder for KPIs have to be set inline in MDX script... do this in the future { string sTableName = null; foreach (DataRow r in datasetMeasures.Tables[0].Rows) { if (Convert.ToString(r["MEASURE_UNIQUE_NAME"]) == "[Measures]." + calc.CalculationReference) { sTableName = Convert.ToString(r["MEASUREGROUP_NAME"]); break; } } if (bRestoreDisplayFolders && string.IsNullOrEmpty(calc.DisplayFolder)) { SSAS.TabularDisplayFolderAnnotation a = annotationSaved.Find(calc); if (a != null) { calc.DisplayFolder = a.DisplayFolder; } } displayFolders.Add(new BIDSHelper.SSAS.TabularDisplayFolder(sTableName, calc)); } } } } displayFolders.Sort(); form.dataGrid1.ItemsSource = displayFolders; if (form.ShowDialog() == true) { //count dirty changes and create annotation SSAS.TabularDisplayFoldersAnnotation annotation = new SSAS.TabularDisplayFoldersAnnotation(); List <SSAS.TabularDisplayFolderAnnotation> folderAnnotationsList = new List <SSAS.TabularDisplayFolderAnnotation>(); int iNumberOfChanges = 0; foreach (BIDSHelper.SSAS.TabularDisplayFolder folder in displayFolders) { if (folder.Dirty) { iNumberOfChanges++; } if (!string.IsNullOrEmpty(folder.DisplayFolder)) { SSAS.TabularDisplayFolderAnnotation folderAnnotation = new SSAS.TabularDisplayFolderAnnotation(); folderAnnotation.TableID = cube.Parent.Dimensions.GetByName(folder.Table).ID; folderAnnotation.ObjectID = folder.ObjectID; folderAnnotation.ObjectType = folder.ObjectType; folderAnnotation.DisplayFolder = folder.DisplayFolder; folderAnnotationsList.Add(folderAnnotation); } } annotation.TabularDisplayFolders = folderAnnotationsList.ToArray(); if (iNumberOfChanges > 0 || bRestoreDisplayFolders) { #if DENALI || SQL2014 Microsoft.AnalysisServices.BackEnd.DataModelingSandbox.AMOCode code; #else Microsoft.AnalysisServices.BackEnd.AMOCode code; #endif code = delegate { using (Microsoft.AnalysisServices.BackEnd.SandboxTransaction tran = sandboxParam.GetSandbox().CreateTransaction()) { foreach (BIDSHelper.SSAS.TabularDisplayFolder folder in displayFolders) { folder.SaveDisplayFolder(); } TabularHelpers.SaveXmlAnnotation(cube.Parent, DISPLAY_FOLDER_ANNOTATION, annotation); TabularHelpers.EnsureDataSourceCredentials(sandboxParam.GetSandbox()); cube.Parent.Update(UpdateOptions.ExpandFull); tran.GetType().InvokeMember("Commit", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Public, null, tran, null); //The .Commit() function used to return a list of strings, but in the latest set of code it is a void method which leads to "method not found" errors //tran.Commit(); } }; #if DENALI || SQL2014 sandbox.ExecuteAMOCode(Microsoft.AnalysisServices.BackEnd.DataModelingSandbox.OperationType.Update, Microsoft.AnalysisServices.BackEnd.DataModelingSandbox.OperationCancellability.AlwaysExecute, code, true); #else sandboxParam.GetSandbox().ExecuteEngineCode(DataModelingSandbox.OperationType.Update, DataModelingSandbox.OperationCancellability.AlwaysExecute, code, true); #endif } } } catch (System.Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace, "BIDS Helper - Error"); } }
/// <summary> /// Determines if the command should be displayed or not. /// </summary> /// <param name="item"></param> /// <returns></returns> //public override bool DisplayCommand(UIHierarchyItem item) //{ // try // { // UIHierarchy solExplorer = this.ApplicationObject.ToolWindows.SolutionExplorer; // if (((System.Array)solExplorer.SelectedItems).Length != 1) // return false; // UIHierarchyItem hierItem = ((UIHierarchyItem)((System.Array)solExplorer.SelectedItems).GetValue(0)); // string sFileName = ((ProjectItem)hierItem.Object).Name.ToLower(); // if (sFileName.EndsWith(".bim")) // { // return true; // } // return (((ProjectItem)hierItem.Object).Object is Cube); // } // catch // { // return false; // } //} public override void Exec() { try { UIHierarchy solExplorer = this.ApplicationObject.ToolWindows.SolutionExplorer; UIHierarchyItem hierItem = (UIHierarchyItem)((System.Array)solExplorer.SelectedItems).GetValue(0); ProjectItem projItem = (ProjectItem)hierItem.Object; string sFileName = ((ProjectItem)hierItem.Object).Name.ToLower(); #if DENALI || SQL2014 Microsoft.AnalysisServices.BackEnd.DataModelingSandbox sandbox = null; #else //Microsoft.AnalysisServices.BackEnd.DataModelingSandboxAmo sandbox = null; DataModelingSandboxWrapper sandbox = null; #endif bool bIsTabular = false; Cube cub = null; if (projItem.Object is Cube) { cub = (Cube)projItem.Object; } else if (sFileName.EndsWith(".bim")) { #if DENALI || SQL2014 sandbox = TabularHelpers.GetTabularSandboxFromBimFile(this, true); cub = sandbox.Cube; bIsTabular = true; Microsoft.AnalysisServices.BackEnd.IDataModelingObjectCollection <Microsoft.AnalysisServices.BackEnd.DataModelingMeasure> measures = sandbox.Measures; #else sandbox = new DataModelingSandboxWrapper(this); //sandbox = TabularHelpers.GetTabularSandboxAmoFromBimFile(this, true); //cub = sandbox.Cube; bIsTabular = true; //Microsoft.AnalysisServices.BackEnd.IDataModelingObjectCollection<Microsoft.AnalysisServices.BackEnd.DataModelingMeasure> measures = sandbox.Cube.AllMeasures; #endif } else { //if you are launching this feature from the Dimension Usage tab, but some other item in Solution Explorer is highlighted, then this code works and the above doesn't projItem = this.ApplicationObject.ActiveWindow.ProjectItem; cub = (Cube)projItem.Object; } DialogResult res = MessageBox.Show("Would you like a detailed report?\r\n\r\nPress Yes to see a detailed dimension usage report.\r\n\r\nPress No to see a summary level Bus Matrix dimension usage report.", "BIDS Helper - Printer Friendly Dimension Usage - Which Report Type?", MessageBoxButtons.YesNo); ReportViewerForm frm = new ReportViewerForm(); if (bIsTabular) { bool bIsBusMatrix = (res == DialogResult.No); System.Collections.Generic.List <DimensionUsage> list = PrinterFriendlyDimensionUsage.GetTabularDimensionUsage(sandbox, bIsBusMatrix); DeploymentSettings _deploymentSettings = new DeploymentSettings(projItem); //reset the database and cube name per the deployment settings foreach (DimensionUsage du in list) { du.DatabaseName = _deploymentSettings.TargetDatabase; du.CubeName = _deploymentSettings.TargetCubeName; } frm.ReportBindingSource.DataSource = list; } else { frm.ReportBindingSource.DataSource = PrinterFriendlyDimensionUsage.GetDimensionUsage(cub); } if (res == DialogResult.No) { frm.Report = "SSAS.PrinterFriendlyDimensionUsageBusMatrix.rdlc"; } else { frm.Report = "SSAS.PrinterFriendlyDimensionUsage.rdlc"; } Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource(); reportDataSource1.Name = "BIDSHelper_DimensionUsage"; reportDataSource1.Value = frm.ReportBindingSource; frm.ReportViewerControl.LocalReport.DataSources.Add(reportDataSource1); if (res == DialogResult.No) { frm.ReportViewerControl.LocalReport.ReportEmbeddedResource = "BIDSHelper.PrinterFriendlyDimensionUsageBusMatrix.rdlc"; frm.Caption = "Printer Friendly Dimension Usage Bus Matrix"; } else { frm.ReportViewerControl.LocalReport.ReportEmbeddedResource = "BIDSHelper.PrinterFriendlyDimensionUsage.rdlc"; frm.Caption = "Printer Friendly Dimension Usage"; } frm.Show(); } catch (System.Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }