├── .gitattributes ├── .gitignore ├── Expressions.md ├── Images ├── 16x16 │ └── test ├── External │ ├── automate.png │ ├── azure.png │ ├── chatgpt.png │ ├── confluence.png │ ├── data_studio.png │ ├── daxguide.png │ ├── devops.png │ ├── fabric.png │ ├── format_dax.png │ ├── format_m.png │ ├── jira.png │ ├── loop.png │ ├── measure.png │ ├── mgt_studio.png │ ├── pbir.png │ ├── pbirs.png │ ├── pbis.png │ ├── powerbitips.png │ ├── profiler.png │ ├── python.png │ ├── rb.png │ ├── refresh.png │ └── service_now.png ├── Images.pptx ├── PBIRS.png ├── PBIRS1.png ├── PBIRS2.png ├── ReadMe │ ├── App.png │ ├── execution_log.png │ ├── image-not-available.png │ ├── powerbi.external_tools.png │ ├── powerbi.performance.png │ ├── powerbi.servicenow.png │ ├── powerbi.servicenow1.png │ ├── powerbi.template.png │ ├── report_list.png │ ├── sharepoint.teamsite.ssrs.png │ ├── ssrs.database_dictionary.png │ ├── ssrs.scheduled_jobs.png │ ├── ssrsdatadictionary.png │ ├── ssrsheatmap_calendar.png │ ├── ssrsreportdocumentation.png │ ├── ssrsreportlisting.png │ ├── ssrsreportsubscriptions.png │ ├── ssrsscheduledjobs.png │ └── subscriptions.png ├── SSRS.png ├── SSRS1.png └── Wiki │ ├── dataset_properties.png │ ├── visualstudioexternaltools.png │ ├── visualstudiotoolsmenu.png │ └── wiki.png ├── LICENSE ├── Miscellaneous ├── .vs │ └── Miscellaneous.vbproj.dtbcache.json ├── App.config ├── Config │ ├── Notepad++ DAX.xml │ ├── Notepad++ M Power Query.xml │ ├── PBI Theme Generator.xlsm │ ├── SSRS_Branding.xlsm │ ├── Software List.txt │ └── Visual_Studio.vsconfig ├── Documentation │ ├── Report Requirements.docx │ ├── Report Style Guide.docx │ ├── Report Unit Testing Checklist.docx │ ├── visualref-sep2018.png │ └── visuals-reference-sep2018-A3.pdf ├── External Tools │ ├── 01 analyzeinexcel.pbitool.json │ ├── 02 almtoolkit.pbitool.json │ ├── 03 bravo.pbitool.json │ ├── 04 daxstudio.pbitool.json │ ├── 05 tabulareditor.pbitool.json │ ├── 05.1 Measure Killer.pbitool.json │ ├── 06 Data-Marc_ModelDocumenter_v2.1.0.pbitool.json │ ├── 07 Python.pbitool.json │ ├── 08 SQL_Server_Profiler.pbitool.json │ ├── 09 Azure_Data_Studio.pbitool.json │ ├── 10 SQL_Management_Studio.pbitool.json │ ├── 11 PowerBI_Report_Builder.pbitool.json │ ├── 12 PowerBI_Service.pbitool.json │ ├── 13 Microsoft_DevOps.pbitool.json │ ├── 14 Microsoft_Power_Automate.pbitool.json │ ├── 15 Microsoft_Azure.pbitool.json │ ├── 16 Service_Now.pbitool.json │ ├── 17 Jira.pbitool.json │ ├── 18 Confluence.pbitool.json │ ├── 19 Microsoft_Loop.pbitool.json │ ├── 20 Microsoft_Fabric_Community.pbitool.json │ ├── 21 Chat_GPT.pbitool.json │ ├── 22 DAX_Guide.pbitool.json │ ├── 23 Format_DAX.pbitool.json │ ├── 24 Format_M.pbitool.json │ └── Read Me.txt ├── Miscellaneous.vbproj ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ └── Settings.settings ├── Scripts │ ├── DAX │ │ ├── Calendar.dax │ │ ├── Calendar_Ageing.dax │ │ ├── Calendar_Hours.dax │ │ ├── Calendar_Timeframe.dax │ │ ├── Dynamic_Number_Format.dax │ │ └── Model_Dictionary.dax │ ├── M │ │ ├── Active Directory Users.M │ │ ├── Azure DevOps Services Changesets.M │ │ ├── Calendar.M │ │ ├── Calendar_FY.M │ │ ├── SN Ticket Id.M │ │ ├── SN Ticket Subcategory.M │ │ ├── SN Ticket User.M │ │ └── SN Ticket.M │ ├── PowerShell │ │ └── save_report_snapshots.ps1 │ ├── RSS │ │ ├── Apply_Header_Footer.rss │ │ ├── Backup_Reports.rss │ │ └── Deploy_Reports.rss │ ├── SQL │ │ ├── Report_Datasets.sql │ │ ├── Report_Linked.sql │ │ ├── Report_Snapshots.sql │ │ ├── Report_Subreports.sql │ │ ├── Source_Control_Current.sql │ │ ├── Unused_Stored_Procedures.sql │ │ └── Update_Subscription_Owner.sql │ └── VB │ │ ├── CandyStripe.vb │ │ ├── CopyNodes.vb │ │ ├── GetParameterandValues.vb │ │ ├── HeatMapColor.vb │ │ └── HeatMapColorGradate.vb └── Templates │ ├── Dashboard Performance.pbit │ └── Template.pbix ├── README.md ├── ServerReports ├── Activity Monitor.rdl ├── Data Sources.rdl ├── Database Dictionary.rdl ├── Execution Log.rdl ├── Heatmap Calendar.rdl ├── Heatmap Calendar.zip ├── Integration Detail.rdl ├── Integrations.rdl ├── Job Search.rdl ├── Permissions.rdl ├── Report Favorites.rdl ├── Report List.rdl ├── ReportServer.rds ├── Scheduled Jobs.rdl ├── ServerReport.rptproj.bak ├── Servers.rsd ├── Subscriptions.rdl └── System Reports.rptproj └── SystemReports.sln /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Adjust your .gitattributes file to treat ClickOnce files as non-text 8 | ############################################################################### 9 | *.manifest binary 10 | *.application binary 11 | *.deploy binary 12 | #*.config binary 13 | #*.vsto binary 14 | 15 | ############################################################################### 16 | # Explicitly declare text files you want to always be normalized and converted 17 | # to native line endings on checkout. 18 | ############################################################################### 19 | #*.config text 20 | #*.config.deploy text 21 | 22 | ############################################################################### 23 | # Declare files that will always have CRLF line endings on checkout. 24 | ############################################################################### 25 | *.sln text eol=crlf 26 | 27 | ############################################################################### 28 | # Set default behavior for command prompt diff. 29 | # 30 | # This is need for earlier builds of msysgit that does not have it on by 31 | # default for csharp files. 32 | # Note: This is only used by command line 33 | ############################################################################### 34 | #*.cs diff=csharp 35 | 36 | ############################################################################### 37 | # Set the merge driver for project and solution files 38 | # 39 | # Merging from the command prompt will add diff markers to the files if there 40 | # are conflicts (Merging from VS is not affected by the settings below, in VS 41 | # the diff markers are never inserted). Diff markers may cause the following 42 | # file extensions to fail to load in VS. An alternative would be to treat 43 | # these files as binary and thus will always conflict and require user 44 | # intervention with every merge. To do so, just uncomment the entries below 45 | ############################################################################### 46 | #*.sln merge=binary 47 | #*.csproj merge=binary 48 | #*.vbproj merge=binary 49 | #*.vcxproj merge=binary 50 | #*.vcproj merge=binary 51 | #*.dbproj merge=binary 52 | #*.fsproj merge=binary 53 | #*.lsproj merge=binary 54 | #*.wixproj merge=binary 55 | #*.modelproj merge=binary 56 | #*.sqlproj merge=binary 57 | #*.wwaproj merge=binary 58 | 59 | ############################################################################### 60 | # behavior for image files 61 | # 62 | # image files are treated as binary by default. 63 | ############################################################################### 64 | #*.jpg binary 65 | #*.png binary 66 | #*.gif binary 67 | 68 | ############################################################################### 69 | # diff behavior for common document formats 70 | # 71 | # Convert binary document formats to text before diffing them. This feature 72 | # is only available from the command line. Turn it on by uncommenting the 73 | # entries below. 74 | ############################################################################### 75 | #*.doc diff=astextplain 76 | #*.DOC diff=astextplain 77 | #*.docx diff=astextplain 78 | #*.DOCX diff=astextplain 79 | #*.dot diff=astextplain 80 | #*.DOT diff=astextplain 81 | #*.pdf diff=astextplain 82 | #*.PDF diff=astextplain 83 | #*.rtf diff=astextplain 84 | #*.RTF diff=astextplain 85 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | [Dd]ebug/ 11 | [Dd]ebugPublic/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | bld/ 16 | [Bb]in/ 17 | [Oo]bj/ 18 | 19 | # Roslyn cache directories 20 | *.ide/ 21 | 22 | # MSTest test Results 23 | [Tt]est[Rr]esult*/ 24 | [Bb]uild[Ll]og.* 25 | 26 | #NUNIT 27 | *.VisualState.xml 28 | TestResult.xml 29 | 30 | # Build Results of an ATL Project 31 | [Dd]ebugPS/ 32 | [Rr]eleasePS/ 33 | dlldata.c 34 | 35 | *_i.c 36 | *_p.c 37 | *_i.h 38 | *.ilk 39 | *.meta 40 | *.obj 41 | *.pch 42 | *.pdb 43 | *.pgc 44 | *.pgd 45 | *.rsp 46 | *.sbr 47 | *.tlb 48 | *.tli 49 | *.tlh 50 | *.tmp 51 | *.tmp_proj 52 | *.log 53 | *.vspscc 54 | *.vssscc 55 | .builds 56 | *.pidb 57 | *.svclog 58 | *.scc 59 | 60 | # Chutzpah Test files 61 | _Chutzpah* 62 | 63 | # Visual C++ cache files 64 | ipch/ 65 | *.aps 66 | *.ncb 67 | *.opensdf 68 | *.sdf 69 | *.cachefile 70 | 71 | # Visual Studio profiler 72 | *.psess 73 | *.vsp 74 | *.vspx 75 | 76 | # TFS 2012 Local Workspace 77 | $tf/ 78 | 79 | # Guidance Automation Toolkit 80 | *.gpState 81 | 82 | # ReSharper is a .NET coding add-in 83 | _ReSharper*/ 84 | *.[Rr]e[Ss]harper 85 | *.DotSettings.user 86 | 87 | # JustCode is a .NET coding addin-in 88 | .JustCode 89 | 90 | # TeamCity is a build add-in 91 | _TeamCity* 92 | 93 | # DotCover is a Code Coverage Tool 94 | *.dotCover 95 | 96 | # NCrunch 97 | _NCrunch_* 98 | .*crunch*.local.xml 99 | 100 | # MightyMoose 101 | *.mm.* 102 | AutoTest.Net/ 103 | 104 | # Web workbench (sass) 105 | .sass-cache/ 106 | 107 | # Installshield output folder 108 | [Ee]xpress/ 109 | 110 | # DocProject is a documentation generator add-in 111 | DocProject/buildhelp/ 112 | DocProject/Help/*.HxT 113 | DocProject/Help/*.HxC 114 | DocProject/Help/*.hhc 115 | DocProject/Help/*.hhk 116 | DocProject/Help/*.hhp 117 | DocProject/Help/Html2 118 | DocProject/Help/html 119 | 120 | # Click-Once directory 121 | #publish/ 122 | 123 | # Publish Web Output 124 | *.[Pp]ublish.xml 125 | *.azurePubxml 126 | ## TODO: Comment the next line if you want to checkin your 127 | ## web deploy settings but do note that will include unencrypted 128 | ## passwords 129 | #*.pubxml 130 | 131 | # NuGet Packages Directory 132 | packages/* 133 | ## TODO: If the tool you use requires repositories.config 134 | ## uncomment the next line 135 | #!packages/repositories.config 136 | 137 | # Enable "build/" folder in the NuGet Packages folder since 138 | # NuGet packages use it for MSBuild targets. 139 | # This line needs to be after the ignore of the build folder 140 | # (and the packages folder if the line above has been uncommented) 141 | !packages/build/ 142 | 143 | # Windows Azure Build Output 144 | csx/ 145 | *.build.csdef 146 | 147 | # Windows Store app package directory 148 | AppPackages/ 149 | 150 | # Others 151 | sql/ 152 | *.Cache 153 | ClientBin/ 154 | [Ss]tyle[Cc]op.* 155 | ~$* 156 | *~ 157 | *.dbmdl 158 | *.dbproj.schemaview 159 | *.pfx 160 | *.publishsettings 161 | node_modules/ 162 | 163 | # RIA/Silverlight projects 164 | Generated_Code/ 165 | 166 | # Backup & report files from converting an old project file 167 | # to a newer Visual Studio version. Backup files are not needed, 168 | # because we have git ;-) 169 | _UpgradeReport_Files/ 170 | Backup*/ 171 | UpgradeLog*.XML 172 | UpgradeLog*.htm 173 | 174 | # SQL Server files 175 | *.mdf 176 | *.ldf 177 | *.sdf 178 | 179 | # Business Intelligence projects 180 | *.rdl.data 181 | *.bim.layout 182 | *.bim_*.settings 183 | 184 | # Microsoft Fakes 185 | FakesAssemblies/ 186 | 187 | # LightSwitch generated files 188 | GeneratedArtifacts/ 189 | _Pvt_Extensions/ 190 | ModelManifest.xml 191 | /.vs/VSWorkspaceState.json 192 | /.vs/slnx.sqlite 193 | /.vs 194 | /publish/Application Files/ScriptHelp_3_0_0_2/ApiHelp.shfbproj.deploy 195 | /ServerReports/System Reports.rptproj.rsuser 196 | -------------------------------------------------------------------------------- /Expressions.md: -------------------------------------------------------------------------------- 1 | |Date Format|VB Functions|.Net Functions| 2 | |:----------|:----------|:----------| 3 | |First Date of last month|=DateAdd(“m”, -1, DateSerial(YEAR(NOW()), MONTH(NOW()), 1))|=Today.AddDays(1- Today.Day).AddMonths(-1)| 4 | |Last date of last month|=DateAdd(“d”, -1, DateSerial(YEAR(NOW()), MONTH(NOW()), 1))|=Today.AddDays(-1 * Today.Day)| 5 | |First date of current month|=DateSerial(YEAR(NOW()), MONTH(NOW()), 1)|=Today.AddDays(1 – Today.Day)| 6 | |Last date of current month|=DateAdd(“d”,-1,(DateAdd(“m”, 1, DateSerial(YEAR(NOW()), MONTH(NOW()), 1))))|=Today.AddDays(-1 * Today.Day).AddMonths(1)| 7 | |Yesterday’s date|=DateAdd(“d”, -1, Today)|=Today.AddDays(-1)| 8 | |Tomorrow’s date|=DateAdd(“d”, 1, Today)|=Today.AddDays(1)| 9 | |First day of current year|=DateSerial(YEAR(NOW()), 1, 1)|=Today.AddDays(1- Today.DayOfYear)| 10 | |Last day of current year|=DateSerial(YEAR(NOW()), 12, 31)|=Today.AddDays(-1 * Today.DayOfYear).AddYears(1)| 11 | |Last day of current year|=DateSerial(YEAR(NOW()), 12, 31)|=Today.AddDays(-1 * Today.DayOfYear).AddYears(1| 12 | -------------------------------------------------------------------------------- /Images/16x16/test: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Images/External/automate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/automate.png -------------------------------------------------------------------------------- /Images/External/azure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/azure.png -------------------------------------------------------------------------------- /Images/External/chatgpt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/chatgpt.png -------------------------------------------------------------------------------- /Images/External/confluence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/confluence.png -------------------------------------------------------------------------------- /Images/External/data_studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/data_studio.png -------------------------------------------------------------------------------- /Images/External/daxguide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/daxguide.png -------------------------------------------------------------------------------- /Images/External/devops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/devops.png -------------------------------------------------------------------------------- /Images/External/fabric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/fabric.png -------------------------------------------------------------------------------- /Images/External/format_dax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/format_dax.png -------------------------------------------------------------------------------- /Images/External/format_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/format_m.png -------------------------------------------------------------------------------- /Images/External/jira.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/jira.png -------------------------------------------------------------------------------- /Images/External/loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/loop.png -------------------------------------------------------------------------------- /Images/External/measure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/measure.png -------------------------------------------------------------------------------- /Images/External/mgt_studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/mgt_studio.png -------------------------------------------------------------------------------- /Images/External/pbir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/pbir.png -------------------------------------------------------------------------------- /Images/External/pbirs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/pbirs.png -------------------------------------------------------------------------------- /Images/External/pbis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/pbis.png -------------------------------------------------------------------------------- /Images/External/powerbitips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/powerbitips.png -------------------------------------------------------------------------------- /Images/External/profiler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/profiler.png -------------------------------------------------------------------------------- /Images/External/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/python.png -------------------------------------------------------------------------------- /Images/External/rb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/rb.png -------------------------------------------------------------------------------- /Images/External/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/refresh.png -------------------------------------------------------------------------------- /Images/External/service_now.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/External/service_now.png -------------------------------------------------------------------------------- /Images/Images.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/Images.pptx -------------------------------------------------------------------------------- /Images/PBIRS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/PBIRS.png -------------------------------------------------------------------------------- /Images/PBIRS1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/PBIRS1.png -------------------------------------------------------------------------------- /Images/PBIRS2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/PBIRS2.png -------------------------------------------------------------------------------- /Images/ReadMe/App.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/App.png -------------------------------------------------------------------------------- /Images/ReadMe/execution_log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/execution_log.png -------------------------------------------------------------------------------- /Images/ReadMe/image-not-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/image-not-available.png -------------------------------------------------------------------------------- /Images/ReadMe/powerbi.external_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/powerbi.external_tools.png -------------------------------------------------------------------------------- /Images/ReadMe/powerbi.performance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/powerbi.performance.png -------------------------------------------------------------------------------- /Images/ReadMe/powerbi.servicenow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/powerbi.servicenow.png -------------------------------------------------------------------------------- /Images/ReadMe/powerbi.servicenow1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/powerbi.servicenow1.png -------------------------------------------------------------------------------- /Images/ReadMe/powerbi.template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/powerbi.template.png -------------------------------------------------------------------------------- /Images/ReadMe/report_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/report_list.png -------------------------------------------------------------------------------- /Images/ReadMe/sharepoint.teamsite.ssrs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/sharepoint.teamsite.ssrs.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrs.database_dictionary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrs.database_dictionary.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrs.scheduled_jobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrs.scheduled_jobs.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrsdatadictionary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrsdatadictionary.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrsheatmap_calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrsheatmap_calendar.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrsreportdocumentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrsreportdocumentation.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrsreportlisting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrsreportlisting.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrsreportsubscriptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrsreportsubscriptions.png -------------------------------------------------------------------------------- /Images/ReadMe/ssrsscheduledjobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/ssrsscheduledjobs.png -------------------------------------------------------------------------------- /Images/ReadMe/subscriptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/ReadMe/subscriptions.png -------------------------------------------------------------------------------- /Images/SSRS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/SSRS.png -------------------------------------------------------------------------------- /Images/SSRS1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/SSRS1.png -------------------------------------------------------------------------------- /Images/Wiki/dataset_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/Wiki/dataset_properties.png -------------------------------------------------------------------------------- /Images/Wiki/visualstudioexternaltools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/Wiki/visualstudioexternaltools.png -------------------------------------------------------------------------------- /Images/Wiki/visualstudiotoolsmenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/Wiki/visualstudiotoolsmenu.png -------------------------------------------------------------------------------- /Images/Wiki/wiki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Images/Wiki/wiki.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Anthony Duguid 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Miscellaneous/.vs/Miscellaneous.vbproj.dtbcache.json: -------------------------------------------------------------------------------- 1 | {"RootPath":"C:\\Users\\tony.duguid\\Source\\Repos\\Reporting-Services-examples\\Miscellaneous","ProjectFileName":"Miscellaneous.vbproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"My Project\\AssemblyInfo.vb"},{"SourceFile":"My Project\\Application.Designer.vb"},{"SourceFile":"My Project\\Resources.Designer.vb"},{"SourceFile":"My Project\\Settings.Designer.vb"},{"SourceFile":"Scripts\\VB\\CandyStripe.vb"},{"SourceFile":"Scripts\\VB\\CopyNodes.vb"},{"SourceFile":"Scripts\\VB\\GetParameterandValues.vb"},{"SourceFile":"Scripts\\VB\\HeatMapColor.vb"},{"SourceFile":"Scripts\\VB\\HeatMapColorGradate.vb"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.vb"}],"References":[{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Users\\tony.duguid\\Source\\Repos\\Reporting-Services-examples\\Miscellaneous\\bin\\Debug\\Scripts.exe","OutputItemRelativePath":"Scripts.exe"},{"OutputItemFullPath":"C:\\Users\\tony.duguid\\Source\\Repos\\Reporting-Services-examples\\Miscellaneous\\bin\\Debug\\Scripts.pdb","OutputItemRelativePath":"Scripts.pdb"}],"CopyToOutputEntries":[]} -------------------------------------------------------------------------------- /Miscellaneous/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Miscellaneous/Config/Notepad++ DAX.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 00-- 00// 01 02 03% 04% 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | - * / ^ = > < >= <= <> & && || ! 17 | 18 | ( 19 | 20 | ) 21 | 22 | 23 | 24 | 25 | 26 | 27 | BITAND BITLSHIFT BITOR BITRSHIFT BITXOR IF.EAGER Updated functions Function CALCULATE CALCULATETABLE FORMAT XIRR CROSSFILTER CALCULATE APPROXIMATEDISTINCTCOUNT AVERAGE AVERAGEA AVERAGEX COUNT COUNTA COUNTAX COUNTBLANK COUNTROWS COUNTX DISTINCTCOUNT DISTINCTCOUNTNOBLANK MAX MAXA MAXX MIN MINA MINX PRODUCT PRODUCTX SUM SUMX CALENDAR CALENDARAUTO DATE DATEDIFF DATEVALUE DAY EDATE EOMONTH HOUR MINUTE MONTH NOW QUARTER SECOND TIME TIMEVALUE TODAY UTCNOW UTCTODAY WEEKDAY WEEKNUM YEAR YEARFRAC ALL ALLCROSSFILTERED ALLEXCEPT ALLNOBLANKROW ALLSELECTED CALCULATE CALCULATETABLE EARLIER EARLIEST FILTER KEEPFILTERS LOOKUPVALUE REMOVEFILTERS SELECTEDVALUE ACCRINT ACCRINTM AMORDEGRC AMORLINC COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD CUMIPMT CUMPRINC DB DDB DISC DOLLARDE DOLLARFR DURATION EFFECT FV INTRATE IPMT ISPMT MDURATION NOMINAL NPER ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD PDURATION PMT PPMT PRICE PRICEDISC PRICEMAT PV RATE RECEIVED RRI SLN SYD TBILLEQ TBILLPRICE TBILLYIELD VDB XIRR XNPV YIELD YIELDDISC YIELDMAT CONTAINS CONTAINSROW CONTAINSSTRING CONTAINSSTRINGEXACT CUSTOMDATA HASONEFILTER HASONEVALUE ISAFTER ISBLANK ISCROSSFILTERED ISEMPTY ISERROR ISEVEN ISFILTERED ISINSCOPE ISLOGICAL ISNONTEXT ISNUMBER ISODD ISONORAFTER ISSELECTEDMEASURE ISSUBTOTAL ISTEXT NONVISUAL SELECTEDMEASURE SELECTEDMEASUREFORMATSTRING SELECTEDMEASURENAME USERNAME USEROBJECTID USERPRINCIPALNAME AND BITAND BITLSHIFT BITOR BITRSHIFT BITXOR COALESCE FALSE IF IF.EAGER IFERROR NOT OR SWITCH TRUE ABS ACOS ACOSH ACOT ACOTH ASIN ASINH ATAN ATANH CEILING CONVERT COS COSH COT COTH CURRENCY DEGREES DIVIDE EVEN EXP FACT FLOOR GCD INT ISO.CEILING LCM LN LOG LOG10 MROUND ODD PI POWER QUOTIENT RADIANS RAND RANDBETWEEN ROUND ROUNDDOWN ROUNDUP SIGN SIN SINH SQRT SQRTPI TAN TANH TRUNC BLANK ERROR PATH PATHCONTAINS PATHITEM PATHITEMREVERSE PATHLENGTH CROSSFILTER RELATED RELATEDTABLE USERELATIONSHIP BETA.DIST BETA.INV CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT COMBIN COMBINA CONFIDENCE.NORM CONFIDENCE.T EXPON.DIST GEOMEAN GEOMEANX MEDIAN MEDIANX NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV PERCENTILE.EXC PERCENTILE.INC PERCENTILEX.EXC PERCENTILEX.INC PERMUT POISSON.DIST RANK.EQ RANKX SAMPLE STDEV.P STDEV.S STDEVX.P STDEVX.S T.DIST T.DIST.2T T.DIST.RT T.INV T.INV.2t VAR.P VAR.S VARX.P VARX.S ADDCOLUMNS ADDMISSINGITEMS CROSSJOIN CURRENTGROUP DATATABLE DETAILROWS DISTINCT column DISTINCT table EXCEPT FILTERS GENERATE GENERATEALL GENERATESERIES GROUPBY IGNORE INTERSECT NATURALINNERJOIN NATURALLEFTOUTERJOIN ROLLUP ROLLUPADDISSUBTOTAL ROLLUPISSUBTOTAL ROLLUPGROUP ROW SELECTCOLUMNS SUBSTITUTEWITHINDEX SUMMARIZE SUMMARIZECOLUMNS Table Constructor TOPN TREATAS UNION VALUES COMBINEVALUES CONCATENATE CONCATENATEX EXACT FIND FIXED FORMAT LEFT LEN LOWER MID REPLACE REPT RIGHT SEARCH SUBSTITUTE TRIM UNICHAR UNICODE UPPER VALUE CLOSINGBALANCEMONTH CLOSINGBALANCEQUARTER CLOSINGBALANCEYEAR DATEADD DATESBETWEEN DATESINPERIOD DATESMTD DATESQTD DATESYTD ENDOFMONTH ENDOFQUARTER ENDOFYEAR FIRSTDATE FIRSTNONBLANK LASTDATE LASTNONBLANK NEXTDAY NEXTMONTH NEXTQUARTER NEXTYEAR OPENINGBALANCEMONTH OPENINGBALANCEQUARTER OPENINGBALANCEYEAR PARALLELPERIOD PREVIOUSDAY PREVIOUSMONTH PREVIOUSQUARTER PREVIOUSYEAR SAMEPERIODLASTYEAR STARTOFMONTH STARTOFQUARTER STARTOFYEAR TOTALMTD TOTALQTD TOTALYTD 28 | VAR 29 | 30 | 31 | 32 | 33 | 34 | 35 | 00[ 01 02] 03" 04 05" 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Miscellaneous/Config/PBI Theme Generator.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Config/PBI Theme Generator.xlsm -------------------------------------------------------------------------------- /Miscellaneous/Config/SSRS_Branding.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Config/SSRS_Branding.xlsm -------------------------------------------------------------------------------- /Miscellaneous/Config/Software List.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Config/Software List.txt -------------------------------------------------------------------------------- /Miscellaneous/Config/Visual_Studio.vsconfig: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "components": [ 4 | "Microsoft.VisualStudio.Component.CoreEditor", 5 | "Microsoft.VisualStudio.Workload.CoreEditor", 6 | "Microsoft.Net.Component.4.8.SDK", 7 | "Microsoft.Net.Component.4.7.2.TargetingPack", 8 | "Microsoft.Net.ComponentGroup.DevelopmentPrerequisites", 9 | "Microsoft.VisualStudio.Component.TypeScript.TSServer", 10 | "Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions", 11 | "Microsoft.VisualStudio.Component.JavaScript.TypeScript", 12 | "Microsoft.VisualStudio.Component.JavaScript.Diagnostics", 13 | "Microsoft.VisualStudio.Component.Roslyn.Compiler", 14 | "Microsoft.Component.MSBuild", 15 | "Microsoft.VisualStudio.Component.Roslyn.LanguageServices", 16 | "Microsoft.VisualStudio.Component.TextTemplating", 17 | "Component.Microsoft.VisualStudio.RazorExtension", 18 | "Microsoft.VisualStudio.Component.IISExpress", 19 | "Microsoft.VisualStudio.Component.NuGet", 20 | "Microsoft.VisualStudio.Component.MSODBC.SQL", 21 | "Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime", 22 | "Microsoft.VisualStudio.Component.Common.Azure.Tools", 23 | "Microsoft.VisualStudio.Component.SQL.CLR", 24 | "Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils", 25 | "Microsoft.Component.ClickOnce", 26 | "Microsoft.VisualStudio.Component.ManagedDesktop.Core", 27 | "Microsoft.VisualStudio.Component.SQL.SSDT", 28 | "Microsoft.VisualStudio.Component.SQL.DataSources", 29 | "Component.Microsoft.Web.LibraryManager", 30 | "Component.Microsoft.WebTools.BrowserLink.WebLivePreview", 31 | "Microsoft.VisualStudio.ComponentGroup.Web", 32 | "Microsoft.NetCore.Component.Runtime.8.0", 33 | "Microsoft.NetCore.Component.SDK", 34 | "Microsoft.VisualStudio.Component.FSharp", 35 | "Microsoft.ComponentGroup.ClickOnce.Publish", 36 | "Microsoft.NetCore.Component.DevelopmentTools", 37 | "Microsoft.VisualStudio.Component.FSharp.WebTemplates", 38 | "Microsoft.VisualStudio.Component.DockerTools", 39 | "Microsoft.NetCore.Component.Web", 40 | "Microsoft.VisualStudio.Component.WebDeploy", 41 | "Microsoft.VisualStudio.Component.AppInsights.Tools", 42 | "Microsoft.VisualStudio.Component.Web", 43 | "Microsoft.Net.Component.4.8.TargetingPack", 44 | "Microsoft.Net.ComponentGroup.4.8.DeveloperTools", 45 | "Microsoft.VisualStudio.Component.AspNet45", 46 | "Microsoft.VisualStudio.Component.AspNet", 47 | "Component.Microsoft.VisualStudio.Web.AzureFunctions", 48 | "Microsoft.VisualStudio.ComponentGroup.AzureFunctions", 49 | "Microsoft.VisualStudio.ComponentGroup.Web.CloudTools", 50 | "Microsoft.VisualStudio.Component.DiagnosticTools", 51 | "Microsoft.VisualStudio.Component.EntityFramework", 52 | "Microsoft.VisualStudio.Component.Debugger.JustInTime", 53 | "Component.Microsoft.VisualStudio.LiveShare.2022", 54 | "Microsoft.VisualStudio.Component.WslDebugging", 55 | "Microsoft.VisualStudio.Component.IntelliCode", 56 | "Microsoft.NetCore.Component.Runtime.6.0", 57 | "Microsoft.VisualStudio.Component.Wcf.Tooling", 58 | "Microsoft.VisualStudio.ComponentGroup.IISDevelopment", 59 | "Microsoft.Net.Component.4.6.2.TargetingPack", 60 | "Microsoft.Net.Component.4.7.TargetingPack", 61 | "Microsoft.Net.Component.4.7.1.TargetingPack", 62 | "Microsoft.Net.ComponentGroup.4.6.2-4.7.1.DeveloperTools", 63 | "Microsoft.VisualStudio.ComponentGroup.AdditionalWebProjectTemplates", 64 | "microsoft.net.runtime.mono.tooling", 65 | "microsoft.net.sdk.emscripten", 66 | "wasm.tools", 67 | "microsoft.net.sdk.emscripten.net7", 68 | "Microsoft.VisualStudio.Workload.NetWeb", 69 | "Microsoft.VisualStudio.Component.Azure.ClientLibs", 70 | "Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites", 71 | "Microsoft.Component.Azure.DataLake.Tools", 72 | "Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools", 73 | "Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools", 74 | "Microsoft.VisualStudio.Component.Azure.AuthoringTools", 75 | "Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools", 76 | "Microsoft.VisualStudio.Component.Azure.Compute.Emulator", 77 | "Microsoft.VisualStudio.Component.Azure.Waverton", 78 | "Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices", 79 | "Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools", 80 | "Microsoft.VisualStudio.Component.Azure.Powershell", 81 | "Microsoft.VisualStudio.Workload.Azure", 82 | "Microsoft.Component.PythonTools", 83 | "Component.CPython39.x64", 84 | "Microsoft.VisualStudio.Component.VC.CoreIde", 85 | "Microsoft.VisualStudio.Component.Windows10SDK", 86 | "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", 87 | "Microsoft.VisualStudio.Component.Graphics.Tools", 88 | "Microsoft.VisualStudio.Component.VC.DiagnosticTools", 89 | "Microsoft.VisualStudio.Component.Windows11SDK.22621", 90 | "Microsoft.ComponentGroup.PythonTools.NativeDevelopment", 91 | "Microsoft.Component.PythonTools.Web", 92 | "Microsoft.VisualStudio.Workload.Python", 93 | "Microsoft.VisualStudio.Component.Node.Tools", 94 | "Microsoft.VisualStudio.Workload.Node", 95 | "Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging", 96 | "Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites", 97 | "Microsoft.VisualStudio.Component.DotNetModelBuilder", 98 | "Microsoft.VisualStudio.Component.FSharp.Desktop", 99 | "Component.Dotfuscator", 100 | "Microsoft.VisualStudio.Component.PortableLibrary", 101 | "Microsoft.ComponentGroup.Blend", 102 | "Microsoft.VisualStudio.Workload.ManagedDesktop", 103 | "Microsoft.VisualStudio.Component.Windows11SDK.22000", 104 | "Microsoft.VisualStudio.Component.Windows10SDK.19041", 105 | "Microsoft.VisualStudio.Component.Windows10SDK.18362", 106 | "Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64", 107 | "Microsoft.VisualStudio.Component.VC.v141.x86.x64", 108 | "Microsoft.VisualStudio.Component.VC.Tools.ARM64EC", 109 | "Microsoft.VisualStudio.Component.UWP.VC.ARM64EC", 110 | "Microsoft.VisualStudio.Component.VC.Tools.ARM64", 111 | "Microsoft.VisualStudio.Component.UWP.VC.ARM64", 112 | "Microsoft.VisualStudio.Component.VC.Tools.ARM", 113 | "Microsoft.VisualStudio.ComponentGroup.UWP.VC", 114 | "Microsoft.Component.NetFX.Native", 115 | "Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard", 116 | "Microsoft.VisualStudio.Component.Graphics", 117 | "Microsoft.VisualStudio.ComponentGroup.UWP.Xamarin", 118 | "Microsoft.VisualStudio.ComponentGroup.UWP.Support", 119 | "Microsoft.VisualStudio.Component.Windows10SDK.IpOverUsb", 120 | "Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM", 121 | "Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM64", 122 | "Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142", 123 | "Microsoft.VisualStudio.Component.VC.v141.ARM", 124 | "Microsoft.VisualStudio.Component.VC.v141.ARM64", 125 | "Microsoft.VisualStudio.ComponentGroup.UWP.VC.v141", 126 | "Microsoft.VisualStudio.Workload.Universal", 127 | "Microsoft.VisualStudio.Workload.Data", 128 | "Microsoft.VisualStudio.Workload.DataScience", 129 | "Microsoft.Net.Component.4.6.TargetingPack", 130 | "Microsoft.VisualStudio.Component.VSSDK", 131 | "Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites", 132 | "Microsoft.Component.CodeAnalysis.SDK", 133 | "Microsoft.VisualStudio.Component.DslTools", 134 | "Microsoft.VisualStudio.Workload.VisualStudioExtension", 135 | "Microsoft.VisualStudio.Component.Workflow", 136 | "Microsoft.VisualStudio.Component.Sharepoint.Tools", 137 | "Microsoft.VisualStudio.Component.TeamOffice", 138 | "Microsoft.VisualStudio.ComponentGroup.Sharepoint.WIF", 139 | "Microsoft.VisualStudio.Workload.Office", 140 | "Component.MDD.Linux", 141 | "Component.MDD.Linux.GCC.arm", 142 | "Component.Linux.CMake", 143 | "Microsoft.VisualStudio.Workload.NativeCrossPlat", 144 | "Microsoft.Component.HelpViewer", 145 | "Microsoft.NetCore.Component.Runtime.5.0", 146 | "Microsoft.NetCore.Component.Runtime.7.0", 147 | "Microsoft.VisualStudio.Component.VisualStudioData", 148 | "Microsoft.VisualStudio.Component.VC.CoreBuildTools" 149 | ] 150 | } -------------------------------------------------------------------------------- /Miscellaneous/Documentation/Report Requirements.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Documentation/Report Requirements.docx -------------------------------------------------------------------------------- /Miscellaneous/Documentation/Report Style Guide.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Documentation/Report Style Guide.docx -------------------------------------------------------------------------------- /Miscellaneous/Documentation/Report Unit Testing Checklist.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Documentation/Report Unit Testing Checklist.docx -------------------------------------------------------------------------------- /Miscellaneous/Documentation/visualref-sep2018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Documentation/visualref-sep2018.png -------------------------------------------------------------------------------- /Miscellaneous/Documentation/visuals-reference-sep2018-A3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Documentation/visuals-reference-sep2018-A3.pdf -------------------------------------------------------------------------------- /Miscellaneous/External Tools/02 almtoolkit.pbitool.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "name": "ALM Toolkit", 4 | "description": "Use ALM Toolkit to perform easy incremental deployment, code/repo/branch merging, and reuse definitions between datasets.", 5 | "path": "C:\\Program Files\\Power BI ALM Toolkit\\Power BI ALM Toolkit\\AlmToolkit.exe", 6 | "arguments": "\"%server%\" \"%database%\"", 7 | "iconData": "image/png;base64,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" 8 | } 9 | -------------------------------------------------------------------------------- /Miscellaneous/External Tools/04 daxstudio.pbitool.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "name": "DAX Studio", 4 | "description": "Use DAX Studio for DAX authoring, diagnosis, performance tuning and analysis.", 5 | "path": "C:\\Program Files\\DAX Studio\\DaxStudio.exe", 6 | "arguments": "/server=\"%server%\" /database=\"%database%\"", 7 | "iconData": "image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTYiIGhlaWdodD0iMjE2IiB2aWV3Qm94PSIwIDAgMjE2IDIxNiI+PHBhdGggZD0iTTE1OS40NjkxLDYyLjAyOWwtMS4wMTg5LTcuNDFMMTIwLjkzODcsMjUuNzY0LDIzLjMxMjQsMzguNTg4NWw5LjA2NjgsNjguOTkzNWMuNTU5Mi0uMDIyNSwxLjExNzctLjA1MTEsMS42OC0uMDUxMUE0MS4yNCw0MS4yNCwwLDAsMSw1OC4yLDExNS4yODg4YTQyLjM0Myw0Mi4zNDMsMCwwLDEsMTQuMDg2Miw1MS4zODRoNjAuNzQ4bC45NjQ2LTIuNjM2NmMuNzc2OS0yLjEyMzMsMS41NzgxLTQuMzA1NCwyLjM4Ni02LjUwNTcsNC4xMy0xMS4yNDY2LDEwLjI3MzctMjcuOTc5MiwxMS4yODg0LTMyLjM4NzctLjQyNTUtMi40MTU0LTEuODk1NC01Ljg4MjgtMy4zMjEtOS4yNDU3LTMuODgyMS05LjE1NzMtOC43MTM1LTIwLjU1NC0zLjc4MjItMzIuNTY2MUE0My4yMjA3LDQzLjIyMDcsMCwwLDEsMTU5LjQ2OTEsNjIuMDI5Wk05NC4zMjc5LDE0NC4zOSw4NS4xOTA1LDc0Ljk3NzlsMTkuNzE3Ni0yLjU2NDkuOTYxOSw3LjA1MzRMOTQuNjQ4Niw4MC45MDkybDcuMjEzNyw1NS4xNDUyLDExLjIyMTQtMS40NDI4Ljk2MTksNy4wNTM1WiIgc3R5bGU9ImZpbGw6IzFhMWExYSIvPjxwb2x5Z29uIHBvaW50cz0iMTI1LjQyNyA1OC45NDcgMTU4LjYxMSA1NC42MTkgMTIxLjA5OSAyNS43NjQgMTI1LjQyNyA1OC45NDciIHN0eWxlPSJmaWxsOiMzNDkyZDAiLz48cGF0aCBkPSJNMTQxLjY0MjksMTY2LjgzMzFoMjYuMDU4OWM0LjMxOTItMTIuMDkzNiwxMC45MTMzLTI4LjEzMjgsMTIuNzg1LTMxLjU4ODEsMy41OTkyLTYuNDc4NywyNy4yMTA2LTguMDYyNCwzMi44MjU1LTIxLjc0YTM1LjI1ODEsMzUuMjU4MSwwLDAsMC03Ljc3NDUtMzguNTg0NWwtOC40OTQzLDIwLjU4OGMtMy44ODcyLDkuMzU4Mi05LjA3LDYuMTkwOC0xNS44MzY5LDMuNDU1M3MtMTIuNjY5NS00LjMxOTEtOC43ODIyLTEzLjY3NzNsOC40OTQzLTIwLjU4OGEzNS4xMjczLDM1LjEyNzMsMCwwLDAtMzIuODI1NiwyMS43NGMtNS42MTQ5LDEzLjY3NzMsNi43NjY3LDI4LjIxODQsNy43NzQ1LDM4LjU4NDRDMTU2LjMsMTI3LjMyNjUsMTQ4LjEyMTYsMTQ5LjEyNDYsMTQxLjY0MjksMTY2LjgzMzFaIiBzdHlsZT0iZmlsbDojMWExYTFhIi8+PHBvbHlnb24gcG9pbnRzPSI4MC4xNzkgMTc2LjQyMiA4OC4xNTIgMTg0LjUyOCA5My43NjcgMTkwLjIzNiAxNjkuMjYgMTkwLjIzNiAxNjkuMjYgMTc2LjQyMiA4MC4xNzkgMTc2LjQyMiIgc3R5bGU9ImZpbGw6IzM0OTJkMCIvPjxwYXRoIGQ9Ik0zNC4wODY5LDE4My4zMTY3YTM0LjUxNTIsMzQuNTE1MiwwLDAsMCwxOC44NTUyLTUuNzA4NUw2NS4yMjM5LDE5MC4yMzZIODIuMzQ5MmwtMjAuNzU4LTIxLjEwMzlhMzMuODgzOSwzMy44ODM5LDAsMSwwLTQ3LjIyNDQsOC4xMywzNC44ODc0LDM0Ljg4NzQsMCwwLDAsMTkuNzIsNi4wNTQ0Wm0wLTU3LjI1NzVBMjMuNDM5NCwyMy40Mzk0LDAsMSwxLDEwLjU2MTIsMTQ5LjU4NWEyMy40MDMxLDIzLjQwMzEsMCwwLDEsMjMuNTI1Ny0yMy41MjU4WiIgc3R5bGU9ImZpbGw6IzFhMWExYSIvPjwvc3ZnPg==" 8 | } 9 | -------------------------------------------------------------------------------- /Miscellaneous/External Tools/05 tabulareditor.pbitool.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "name": "Tabular Editor", 4 | "description": "Launch Tabular Editor to quickly and easily make batch changes to your semantic model.", 5 | "path": "C:\\Program Files (x86)\\Tabular Editor\\TabularEditor.exe", 6 | "arguments": "\"%server%\" \"%database%\"", 7 | "iconData": "image/png;base64,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" 8 | } 9 | 10 | 11 | -------------------------------------------------------------------------------- /Miscellaneous/External Tools/12 PowerBI_Service.pbitool.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "name": "Power BI Service", 4 | "description": "Opens the Power BI Online", 5 | "path": "C:\\Windows\\explorer.exe", 6 | "arguments": "https://app.powerbi.com/home/", 7 | "iconData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDsMgDPvnFDtCXoVwHLp20m6w489AOrXVLBG7mJqQtH/er/ToELZkS/FccybAqlVpEE4TbVQmG3VAnqH4up9+hoAVrNPwPJmP/fjhYG5QyynIn2GsV6NadOC3oLhIe0cCsUVQjSCVaXAEtPksytXL+QnrTlf4XKmXlWjEcY3Dt28rmN624B4V2ZWVUFXzbED7sqQNoqCyOg6yGrSCG2yOTjCQf3M6kL7Tzlo7K7S8ywAAAYVpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfU7UiFRU7iDhkqIJgFxVxLFUsgoXSVmjVweTSD6FJQ5Li4ii4Fhz8WKw6uDjr6uAqCIIfIM4OToouUuL/kkKLGA+O+/Hu3uPuHSDUy0w1O6KAqllGKh4Ts7kVMfCKAAbQhX6MS8zUE+mFDDzH1z18fL2L8Czvc3+OXiVvMsAnEkeZbljE68Qzm5bOeZ84xEqSQnxOPGHQBYkfuS67/Ma56LDAM0NGJjVHHCIWi20stzErGSrxNHFYUTXKF7IuK5y3OKvlKmvek78wmNeW01ynOYI4FpFAEiJkVLGBMixEaNVIMZGi/ZiHf9jxJ8klk2sDjBzzqECF5PjB/+B3t2ZhatJNCsaAzhfb/hgFArtAo2bb38e23TgB/M/AldbyV+rA7CfptZYWPgL6toGL65Ym7wGXO8DQky4ZkiP5aQqFAvB+Rt+UAwZvgZ5Vt7fmPk4fgAx1tXQDHBwCY0XKXvN4d3d7b/+eafb3A5cNcrUqDhOFAAAOVWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDplZDY1NWE0Zi05OTA5LTQ1Y2MtOGMzMi0wYWQxNmU3YTZiNTAiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzMwZDNiYjAtYTcxZS00OTlhLWJiY2YtYTlkNmI4ZDlhYTA5IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6N2I4YzcxYmItZjY0Mi00ZjlkLTgzODItNmMyMGI4ODBiYTBkIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MjEyNzcwODQwOTg1MTkiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zNiIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDc6MThUMTQ6MzE6MjErMTA6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA3OjE4VDE0OjMxOjIxKzEwOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MWQ2N2VlZWItOWI4MC00ODhlLTkyMzMtMjJiN2M5MTI5ODk0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA3LTE4VDA5OjUwOjAwIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjRkN2RlYjU3LWZiNGYtNGIyMy04M2JiLWU0Njc0MjBjMTA5OCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNy0xOFQxNDozMToyNCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz60ayF4AAAABmJLR0QAAwADAAMlrC5MAAAACXBIWXMAADLAAAAywAEoZFrbAAAAB3RJTUUH6AcSBB8Yp8xOXwAAIABJREFUeNrtXcuOJElWvRYRVdXVU92thgU0w7BAmmYE0rBBrBCCDRIbpPkBxIZP4QfgG1gg8QloBEhI7BASsBuhGWmQEE9101mVmeF+WWRGlYeHPa493O2a2TmlVEVGeHp4hLsfP+e42b1EAAAAAAAA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" 8 | } -------------------------------------------------------------------------------- /Miscellaneous/External Tools/22 DAX_Guide.pbitool.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "name": "DAX Guide", 4 | "description": "Opens the DAX Guide in the default web browser", 5 | "path": "C:\\Windows\\explorer.exe", 6 | "arguments": "https://dax.guide/", 7 | "iconData": "data:image/png;base64,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" 8 | } -------------------------------------------------------------------------------- /Miscellaneous/External Tools/Read Me.txt: -------------------------------------------------------------------------------- 1 | 2 | The order of the buttons in the external tools is alphabetic on the json file name. This is why I use a two digit number prefix. 3 | 4 | copy .json files here... 5 | 6 | C:\Program Files (x86)\Common Files\Microsoft Shared\Power BI Desktop\External Tools 7 | 8 | use https://www.base64-image.de/ to generate the Base64 Image code for icons 9 | -------------------------------------------------------------------------------- /Miscellaneous/Miscellaneous.vbproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {881F7039-10CA-4670-8557-D727892688FB} 8 | Exe 9 | Scripts.Module1 10 | Scripts 11 | Scripts 12 | 512 13 | Console 14 | v4.8 15 | true 16 | publish\ 17 | true 18 | Disk 19 | false 20 | Foreground 21 | 7 22 | Days 23 | false 24 | false 25 | true 26 | 0 27 | 1.0.0.%2a 28 | false 29 | false 30 | true 31 | 32 | 33 | 34 | AnyCPU 35 | true 36 | full 37 | true 38 | true 39 | bin\Debug\ 40 | Scripts.xml 41 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 42 | 43 | 44 | AnyCPU 45 | pdbonly 46 | false 47 | true 48 | true 49 | bin\Release\ 50 | Scripts.xml 51 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 52 | 53 | 54 | On 55 | 56 | 57 | Binary 58 | 59 | 60 | Off 61 | 62 | 63 | On 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | True 90 | Application.myapp 91 | True 92 | 93 | 94 | True 95 | True 96 | Resources.resx 97 | 98 | 99 | True 100 | Settings.settings 101 | True 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | VbMyResourcesResXFileCodeGenerator 112 | Resources.Designer.vb 113 | My.Resources 114 | Designer 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | MyApplicationCodeGenerator 133 | Application.Designer.vb 134 | 135 | 136 | SettingsSingleFileGenerator 137 | My 138 | Settings.Designer.vb 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | False 175 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 176 | true 177 | 178 | 179 | False 180 | .NET Framework 3.5 SP1 181 | false 182 | 183 | 184 | 185 | 186 | 193 | -------------------------------------------------------------------------------- /Miscellaneous/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /Miscellaneous/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | 0 6 | true 7 | 0 8 | 2 9 | true 10 | 11 | -------------------------------------------------------------------------------- /Miscellaneous/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | 5 | ' General Information about an assembly is controlled through the following 6 | ' set of attributes. Change these attribute values to modify the information 7 | ' associated with an assembly. 8 | 9 | ' Review the values of the assembly attributes 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 21 | 22 | 23 | ' Version information for an assembly consists of the following four values: 24 | ' 25 | ' Major Version 26 | ' Minor Version 27 | ' Build Number 28 | ' Revision 29 | ' 30 | ' You can specify all the values or you can default the Build and Revision Numbers 31 | ' by using the '*' as shown below: 32 | ' 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Miscellaneous/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Scripts.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | End Module 63 | End Namespace 64 | -------------------------------------------------------------------------------- /Miscellaneous/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /Miscellaneous/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings Auto-Save Functionality" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | End Class 57 | End Namespace 58 | 59 | Namespace My 60 | 61 | _ 64 | Friend Module MySettingsProperty 65 | 66 | _ 67 | Friend ReadOnly Property Settings() As Global.Scripts.My.MySettings 68 | Get 69 | Return Global.Scripts.My.MySettings.Default 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /Miscellaneous/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/DAX/Calendar.dax: -------------------------------------------------------------------------------- 1 | Calendar = 2 | VAR _today_date = TODAY() //'Properties'[Today Date] 3 | VAR _fiscal_year = YEAR(EDATE( _today_date, 6)) 4 | VAR _fiscal_year_start = DATE ( _fiscal_year - 1, 07, 01) 5 | VAR _fiscal_year_end = DATE ( _fiscal_year, 06, 30) 6 | 7 | VAR _result = 8 | ADDCOLUMNS 9 | ( 10 | //CALENDARAUTO() //range of dates is calculated automatically based on data in the model 11 | CALENDAR(_fiscal_year_start, _fiscal_year_end) 12 | , "Calendar Year Period End", FORMAT([Date], "yyyy12") 13 | , "Calendar Year Period Start", FORMAT([Date], "yyyy01") 14 | , "Calendar Year Period", FORMAT([Date], "yyyyMM") 15 | , "Calendar Year Quarter Nbr", QUARTER([Date]) 16 | , "Calendar Year Quarter", FORMAT([Date], "\C\Yyyyy \Qq") 17 | , "Calendar Year Half", FORMAT([Date], "\F\Yyyyy \H") & ROUNDUP(MONTH([Date]) / 6, 0) 18 | , "Calendar Year", YEAR([Date]) 19 | , "Day Name Short", FORMAT([Date], "DDD") 20 | , "Day Name", FORMAT([Date], "DDDD") 21 | , "Day Of Week", WEEKDAY([Date]) 22 | , "Day", DAY([Date]) 23 | , "Fiscal Year Period End", FORMAT(EDATE([Date], 6), "yyyy12") 24 | , "Fiscal Year Period Start", FORMAT(EDATE([Date], 6), "yyyy01") 25 | , "Fiscal Year Period", FORMAT(EDATE([Date], 6), "yyyyMM") 26 | , "Fiscal Year Quarter Nbr", FORMAT(EDATE([Date], 6), "q") 27 | , "Fiscal Year Quarter", FORMAT(EDATE([Date], 6), "\F\Yyyyy \Qq") 28 | , "Fiscal Year Half", FORMAT(EDATE([Date], 6), "\F\Yyyyy \H") & ROUNDUP(MONTH(EDATE([Date], 6)) / 6, 0) 29 | , "Fiscal Year", YEAR(EDATE([Date], 6)) 30 | , "Is Current FY", IF(YEAR(EDATE([Date], 6)) = _fiscal_year, 1, 0) 31 | , "Is Future", IF([Date] > _today_date, 1, 0) 32 | , "Is Past", IF([Date] < _today_date, 1, 0) 33 | , "Is Weekend", IF(WEEKDAY([Date], 1) = 1 || WEEKDAY([Date], 1) = 7, 1, 0) 34 | , "Month End", EOMONTH([Date], 0) 35 | , "Month Name Short", FORMAT([Date], "MMM") 36 | , "Month Name", FORMAT([Date], "MMMM") 37 | , "Month Start", DATE(YEAR([Date]), MONTH([Date]), 1) 38 | , "Month", MONTH([Date]) 39 | , "Week Ending", [Date] + 7 - WEEKDAY([Date], 1) // Saturday 40 | , "Week Starting", [Date] - WEEKDAY([Date], 1) + 1 // Sunday 41 | , "Week Day", WEEKDAY([Date], 2) 42 | , "Week of Month", 1 + WEEKNUM([Date]) - WEEKNUM( EOMONTH([Date], -1 ) + 1 ) 43 | , "Week of Year", WEEKNUM([Date]) 44 | , "Week of Fiscal Year", IF(MONTH([Date]) < 7 45 | , WEEKNUM([Date], 1) + (WEEKNUM(DATE(YEAR([Date]), 7, 1), 1) - 1) 46 | , WEEKNUM([Date], 1) - WEEKNUM(DATE(YEAR([Date]), 7, 1), 1) + 1) 47 | ) 48 | 49 | RETURN 50 | _result 51 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/DAX/Calendar_Ageing.dax: -------------------------------------------------------------------------------- 1 | Calendar Ageing = 2 | VAR _today_date = TODAY() //'Properties'[Today Date] 3 | VAR _min_date1 = CALCULATE(MIN(Table1[Date1])) 4 | VAR _min_date2 = CALCULATE(MIN(Table2[Date2])) 5 | VAR _future_date = IF(_min_date1 < _min_date2, _min_date1, _min_date2) 6 | //VAR _future_date = DATE( YEAR( _today_date ) - 6, 01, 01 ) 7 | 8 | VAR _result = 9 | UNION ( 10 | ADDCOLUMNS (CALENDAR ( _today_date - 30, _today_date), "Ageing Days", "0 to 30", "Ageing Days Order", 1) 11 | , ADDCOLUMNS (CALENDAR ( _today_date - 60, _today_date - 31 ), "Ageing Days", "31 to 60", "Ageing Days Order", 2) 12 | , ADDCOLUMNS (CALENDAR ( _today_date - 90, _today_date - 61 ), "Ageing Days", "61 to 90", "Ageing Days Order", 3) 13 | , ADDCOLUMNS (CALENDAR ( _today_date - 120, _today_date - 91 ), "Ageing Days", "91 to 120", "Ageing Days Order", 4) 14 | , ADDCOLUMNS (CALENDAR ( _future_date, _today_date - 121), "Ageing Days", "120+", "Ageing Days Order", 5) 15 | ) 16 | 17 | RETURN 18 | _result -------------------------------------------------------------------------------- /Miscellaneous/Scripts/DAX/Calendar_Hours.dax: -------------------------------------------------------------------------------- 1 | Calendar Hours = 2 | VAR _start_time = TIME(0, 0, 0) 3 | VAR _end_time = TIME(23, 0, 0) 4 | VAR _duration = TIME(1, 0, 0) 5 | VAR _hours = SELECTCOLUMNS (GENERATESERIES(_start_time, _end_time, _duration), "Hours", [Value] ) 6 | 7 | RETURN 8 | _hours -------------------------------------------------------------------------------- /Miscellaneous/Scripts/DAX/Calendar_Timeframe.dax: -------------------------------------------------------------------------------- 1 | Calendar Timeframe = 2 | VAR _today_date = TODAY() //'Properties'[Today Date] 3 | VAR _yesterday_date = _today_date - 1 4 | VAR _week_start = _today_date - WEEKDAY ( _today_date, 2 ) 5 | VAR _week_end = _today_date - WEEKDAY ( _today_date, 2 ) + 6 6 | VAR _month_start = DATE( YEAR(_today_date), MONTH(_today_date), 01 ) 7 | VAR _month_end = EOMONTH( _today_date, 0) 8 | VAR _quarter_start = DATE ( YEAR (_today_date), ROUNDUP ( DIVIDE ( MONTH (_today_date), 3 ), 0 ) * 3 - 2, 1 ) 9 | VAR _quarter_end = EOMONTH(EDATE(_quarter_start, 2), 0) 10 | VAR _fiscal_year = YEAR(EDATE( _today_date, 6)) 11 | VAR _fiscal_year_start = DATE( _fiscal_year - 1, 07, 01) 12 | VAR _fiscal_year_end = DATE( _fiscal_year, 06, 30) 13 | VAR _tomorrow_date = IF(_today_date + 1 > _fiscal_year_end, _fiscal_year_end, _today_date + 1) 14 | VAR _calendar_year = YEAR(_today_date) 15 | VAR _calendar_year_start = DATE( _calendar_year , 01, 01) 16 | VAR _calendar_year_end = DATE( _calendar_year, 12, 31) 17 | VAR _previous_month_start = IF(MONTH(_today_date) = 1, DATE(YEAR(_today_date)-1, 12, 1), DATE(YEAR(_today_date), MONTH(_today_date)-1, 1)) 18 | VAR _previous_month_end = DATE(YEAR(_previous_month_start), MONTH(_previous_month_start), DAY(EOMONTH(_previous_month_start, 0))) 19 | VAR _previous_quarter_start = EDATE(_quarter_start, -3) 20 | VAR _previous_quarter_end = EOMONTH(EDATE(_quarter_start, -1), 0) 21 | VAR _previous_fiscal_year_start = DATE( _fiscal_year - 2, 07, 01) 22 | VAR _previous_fiscal_year_end = DATE( _fiscal_year - 1, 06, 30) 23 | VAR _previous_calendar_year_start = DATE( _calendar_year - 1, 01, 01) 24 | VAR _previous_calendar_year_end = DATE( _calendar_year - 1, 12, 31) 25 | VAR _today_date_py = DATE( YEAR(_today_date) - 1, MONTH(_today_date), DAY(_today_date) ) 26 | VAR _week_start_py = DATE( YEAR(_today_date_py), 1 , 1) + (WEEKNUM(_today_date_py) - 1 ) * 7 27 | VAR _month_start_py = DATE( YEAR(_today_date_py), MONTH(_today_date), 01 ) 28 | VAR _quarter_start_py = DATE( YEAR(_quarter_start) - 1, MONTH(_quarter_start), 01 ) 29 | VAR _fiscal_year_start_py = DATE( YEAR(_fiscal_year_start) - 1, MONTH(_fiscal_year_start), 01 ) 30 | 31 | VAR _result = 32 | UNION ( 33 | ADDCOLUMNS (CALENDAR ( _today_date, _today_date), "Timeframe", "Today", "Timeframe Order", 1 ) 34 | , ADDCOLUMNS (CALENDAR ( _yesterday_date, _yesterday_date), "Timeframe", "Yesterday", "Timeframe Order", 2 ) 35 | 36 | // Week 37 | , ADDCOLUMNS (CALENDAR ( _week_start - 7, _week_end - 7 ), "Timeframe", "Previous Week", "Timeframe Order", 3 ) 38 | , ADDCOLUMNS (CALENDAR ( _week_start, _week_end ), "Timeframe", "Current Week", "Timeframe Order", 4 ) 39 | , ADDCOLUMNS (CALENDAR ( _week_start, _today_date ), "Timeframe", "WTD", "Timeframe Order", 5 ) 40 | , ADDCOLUMNS (CALENDAR ( _week_start_py, _today_date_py ), "Timeframe", "WTD Previous Year", "Timeframe Order", 6 ) 41 | 42 | // Month 43 | , ADDCOLUMNS (CALENDAR ( _previous_month_start, _previous_month_end ), "Timeframe", "Previous Month", "Timeframe Order", 7 ) 44 | , ADDCOLUMNS (CALENDAR ( _month_start, _month_end ), "Timeframe", "Current Month", "Timeframe Order", 8 ) 45 | , ADDCOLUMNS (CALENDAR ( _month_start, _today_date ), "Timeframe", "MTD", "Timeframe Order", 9 ) 46 | , ADDCOLUMNS (CALENDAR ( _month_start_py, _today_date_py ), "Timeframe", "MTD Previous Year", "Timeframe Order", 10 ) 47 | 48 | // Quarter 49 | , ADDCOLUMNS (CALENDAR ( _previous_quarter_start, _previous_quarter_end ), "Timeframe", "Previous Qtr", "Timeframe Order", 11 ) 50 | , ADDCOLUMNS (CALENDAR ( _quarter_start, _quarter_end ), "Timeframe", "Current Qtr", "Timeframe Order", 12 ) 51 | , ADDCOLUMNS (CALENDAR ( _quarter_start, _today_date ), "Timeframe", "QTD", "Timeframe Order", 13 ) 52 | , ADDCOLUMNS (CALENDAR ( _quarter_start_py, _today_date_py ), "Timeframe", "QTD Previous Year", "Timeframe Order", 14 ) 53 | 54 | // Financial Year 55 | , ADDCOLUMNS (CALENDAR ( _previous_fiscal_year_start, _previous_fiscal_year_end ), "Timeframe", "Previous Fiscal Year", "Timeframe Order", 15 ) 56 | , ADDCOLUMNS (CALENDAR ( _fiscal_year_start_py, _today_date_py ), "Timeframe", "YTD Previous Fiscal Year", "Timeframe Order", 16 ) 57 | , ADDCOLUMNS (CALENDAR ( _fiscal_year_start, _fiscal_year_end ), "Timeframe", "Current Fiscal Year", "Timeframe Order", 17 ) 58 | , ADDCOLUMNS (CALENDAR ( _fiscal_year_start, _today_date ), "Timeframe", "YTD Fiscal", "Timeframe Order", 18 ) 59 | , ADDCOLUMNS (CALENDAR ( _tomorrow_date, _fiscal_year_end ), "Timeframe", "Rest of Fiscal Year", "Timeframe Order", 19 ) 60 | 61 | // Calendar Year 62 | , ADDCOLUMNS (CALENDAR ( _previous_calendar_year_start, _previous_calendar_year_end ), "Timeframe", "Previous Calendar Year", "Timeframe Order", 20 ) 63 | , ADDCOLUMNS (CALENDAR ( _previous_calendar_year_start, _today_date_py ), "Timeframe", "YTD Previous Calendar Year", "Timeframe Order", 21 ) 64 | , ADDCOLUMNS (CALENDAR ( _calendar_year_start, _calendar_year_end ), "Timeframe", "Current Calendar Year", "Timeframe Order", 22 ) 65 | , ADDCOLUMNS (CALENDAR ( _calendar_year_start, _today_date ), "Timeframe", "YTD Calendar", "Timeframe Order", 23 ) 66 | , ADDCOLUMNS (CALENDAR ( _tomorrow_date, _calendar_year_end ), "Timeframe", "Rest of Calendar Year", "Timeframe Order", 24 ) 67 | ) 68 | 69 | RETURN 70 | _result 71 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/DAX/Dynamic_Number_Format.dax: -------------------------------------------------------------------------------- 1 | VAR CurrentValue = SELECTEDMEASURE() 2 | RETURN 3 | SWITCH ( 4 | TRUE (), 5 | // format the number based on value 6 | CurrentValue <= -1E6, "#,0,,.00 M", 7 | CurrentValue <= -1E3, "#,0,.00 K", 8 | CurrentValue <= 1E3, "#,0.00", 9 | CurrentValue < 1E6, "#,0,.00 K", 10 | CurrentValue < 1E9, "#,0,,.00 M", 11 | CurrentValue < 1E12, "#,0,,,.00 B" 12 | ) -------------------------------------------------------------------------------- /Miscellaneous/Scripts/DAX/Model_Dictionary.dax: -------------------------------------------------------------------------------- 1 | EVALUATE 2 | //Column and Measure Definitions = 3 | VAR _columns = 4 | UNION( 5 | SELECTCOLUMNS(INFO.COLUMNS() 6 | , "Column", IF(ISBLANK([ExplicitName]), [InferredName], [ExplicitName]) 7 | , "Type", "Column" 8 | , "Description", [Description] 9 | , "Folder", [DisplayFolder] 10 | , "Formula", [Expression] 11 | , "TableID", [TableID] 12 | , "Format", [FormatString] 13 | , "ModifiedTime", [ModifiedTime] 14 | , "IsHidden", [IsHidden] 15 | ) 16 | , SELECTCOLUMNS(INFO.MEASURES() 17 | , "Measure", [Name] 18 | , "Type", "Measure" 19 | , "Description", [Description] 20 | , "Folder", [DisplayFolder] 21 | , "Formula", [Expression] 22 | , "TableID", [TableID] 23 | , "Format", [FormatString] 24 | , "ModifiedTime", [ModifiedTime] 25 | , "IsHidden", [IsHidden] 26 | ) 27 | ) 28 | 29 | 30 | VAR _tables = SELECTCOLUMNS(INFO.TABLES() 31 | , "TableID", [ID] 32 | , "Table", [Name] 33 | ) 34 | 35 | VAR _combined = NATURALLEFTOUTERJOIN(_columns, _tables) 36 | VAR _filtered = FILTER(_combined, [IsHidden] = FALSE) 37 | 38 | RETURN 39 | SELECTCOLUMNS( 40 | _filtered 41 | , "Column", [Column] 42 | , "Type", [Type] 43 | , "Folder", [Folder] 44 | , "Table", [Table] 45 | , "Description", [Description] 46 | , "Calculation", SUBSTITUTE(SUBSTITUTE([Formula], UNICHAR(13), " "), UNICHAR(10), " ") 47 | , "Format", [Format] 48 | , "Modified Time", Format([ModifiedTime], "dd-MMM-yyyy hh:mm:ss") 49 | //, "Modified Time", [ModifiedTime] 50 | ) ORDER BY [Modified Time] DESC 51 | 52 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/Active Directory Users.M: -------------------------------------------------------------------------------- 1 | //Active Directory list of users, set the parameter "domain_name" 2 | 3 | let 4 | Source = ActiveDirectory.Domains(domain_name), 5 | domain_name = Source{[Domain=domain_name]}[#"Object Categories"], 6 | user1 = domain_name{[Category="user"]}[Objects], 7 | #"Removed Other Columns" = Table.SelectColumns(user1,{"organizationalPerson", "displayName"}), 8 | #"Reordered Columns" = Table.ReorderColumns(#"Removed Other Columns",{"displayName", "organizationalPerson"}), 9 | #"Expanded organizationalPerson1" = Table.ExpandRecordColumn(#"Reordered Columns", "organizationalPerson", {"mail", "thumbnailPhoto", "title", "department"}, { "User Email", "thumbnailPhoto", "title", "department"}), 10 | #"Changed Type" = Table.TransformColumnTypes(#"Expanded organizationalPerson1",{{"thumbnailPhoto", type text}}), 11 | #"Added Prefix" = Table.TransformColumns(#"Changed Type", {{"thumbnailPhoto", each "data:image/jpeg;base64," & _, type text}}), 12 | #"Filtered Rows" = Table.SelectRows(#"Added Prefix", each ([thumbnailPhoto] <> null)), 13 | #"Removed Duplicates" = Table.Distinct(#"Filtered Rows", {"User Email"}), 14 | #"Filtered Rows1" = Table.SelectRows(#"Removed Duplicates", each ([User Email] <> null and [User Email] <> "-")), 15 | #"Renamed Columns" = Table.RenameColumns(#"Filtered Rows1",{{"displayName", "User_Full_Name"}, {"User Email", "User_Email"}, {"thumbnailPhoto", "User_Photo"}, {"department", "Department"}, {"title", "Title"}}) 16 | in 17 | #"Renamed Columns" -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/Azure DevOps Services Changesets.M: -------------------------------------------------------------------------------- 1 | //set the parameter "source_control_org_url" e.g. https://dev.azure.com/YourOrganziation/YourProject 2 | 3 | let 4 | Source = VSTS.Contents(source_control_org_url & "/_apis/tfvc/changesets?api-version=6.0"), 5 | #"Imported JSON" = Table.FromRecords(Json.Document(Source,65001)[value]), 6 | checkedInBy = Table.ExpandRecordColumn(#"Imported JSON", "checkedInBy", {"displayName", "uniqueName"}, { "Checked In Name", "Checked In Email"}), 7 | #"Added Custom" = Table.AddColumn(checkedInBy, "Created DateTime", each DateTimeZone.RemoveZone(DateTimeZone.SwitchZone(DateTime.AddZone(DateTime.From([createdDate]),12), -12))), 8 | #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"author", "createdDate"}), 9 | #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"comment", "Comment"}, {"changesetId", "Id"}}), 10 | #"Duplicated Column" = Table.DuplicateColumn(#"Renamed Columns", "url", "url - Copy"), 11 | #"Split Column by Delimiter" = Table.SplitColumn(#"Duplicated Column", "url - Copy", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"url - Copy.1", "url - Copy.2", "url - Copy.3", "url - Copy.4", "url - Copy.5", "url - Copy.6", "url - Copy.7", "url - Copy.8", "url - Copy.9"}), 12 | #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"url - Copy.1", type text}, {"url - Copy.2", type text}, {"url - Copy.3", type text}, {"url - Copy.4", type text}, {"url - Copy.5", type text}, {"url - Copy.6", type text}, {"url - Copy.7", type text}, {"url - Copy.8", type text}, {"url - Copy.9", Int64.Type}}), 13 | #"Removed Columns1" = Table.RemoveColumns(#"Changed Type",{"url - Copy.1", "url - Copy.2", "url - Copy.3", "url - Copy.6", "url - Copy.7", "url - Copy.8", "url - Copy.9"}), 14 | #"Renamed Columns1" = Table.RenameColumns(#"Removed Columns1",{{"url - Copy.4", "Organization"}, {"url - Copy.5", "Project"}}), 15 | #"Duplicated Column1" = Table.DuplicateColumn(#"Renamed Columns1", "Created DateTime", "Created DateTime - Copy"), 16 | #"Changed Type1" = Table.TransformColumnTypes(#"Duplicated Column1",{{"Created DateTime - Copy", type date}}), 17 | #"Renamed Columns2" = Table.RenameColumns(#"Changed Type1",{{"Created DateTime - Copy", "Created Date"}}), 18 | #"Reordered Columns" = Table.ReorderColumns(#"Renamed Columns2",{"Id", "url", "Checked In Name", "Checked In Email", "Comment", "Created Date", "Created DateTime", "Organization", "Project"}), 19 | #"Changed Type2" = Table.TransformColumnTypes(#"Reordered Columns",{{"Created DateTime", type datetime}}), 20 | #"Replaced Value" = Table.ReplaceValue(#"Changed Type2","/_apis/tfvc/changesets/","/_versionControl/changeset/",Replacer.ReplaceText,{"url"}) 21 | in 22 | #"Replaced Value" 23 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/Calendar.M: -------------------------------------------------------------------------------- 1 | let 2 | //Set the following variables 3 | Culture = "English (United States)", //Select a culture. 4 | UseYesterdayAsCurrentDate = true, //true = yesterday, false = today 5 | YearsBack = 6, //How many years to include prior to the current year. 6 | YearsAhead = 6, //How many years to include after the current year. 7 | FyYearsBack = 2, //How many fiscal years to include prior to the current year. 8 | FyYearsAhead = 2, //How many fiscal years to include after the current year. 9 | GoToBeginning = "Year", //Options: Year, Month, None 10 | GoToEnd = "Year", //Options: Year, Month, None 11 | 12 | //Figure the Start and End Dates, based on above variables 13 | DateToday = DateTime.Date(DateTime.LocalNow()), 14 | CurrentDate = if UseYesterdayAsCurrentDate = true then Date.AddDays(DateToday, -1) else DateToday, 15 | YearBegin = Date.Year(CurrentDate) - YearsBack, 16 | MonthBegin = if GoToBeginning = "Year" then 1 else Date.Month(CurrentDate), 17 | DayBegin = if GoToBeginning = "None" then Date.Day(CurrentDate) else 1, 18 | StartDate = #date(YearBegin, MonthBegin, DayBegin), 19 | YearEnd = Date.Year(CurrentDate) + YearsAhead, 20 | MonthEnd = if GoToEnd = "Year" then 12 else Date.Month(CurrentDate), 21 | DayEndTemp = if GoToEnd = "Year" then 31 else Date.Day(CurrentDate), 22 | EndDateTemp = #date(YearEnd, MonthEnd, DayEndTemp), 23 | EndDate = if GoToEnd = "Month" then DateTime.Date(Date.EndOfMonth(EndDateTemp)) else EndDateTemp, 24 | DayCount = Duration.Days(Duration.From(EndDate - StartDate)) + 1, 25 | 26 | //Get complete list of dates, Convert to a table, update name and data type 27 | AllDates = List.Dates(StartDate,DayCount,#duration(1,0,0,0)), 28 | TableFromList = Table.FromList(AllDates, Splitter.SplitByNothing()), 29 | ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}), 30 | RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}), 31 | 32 | //Add other attributes of the date, as desired 33 | InsertYear = Table.AddColumn(RenamedColumns, "Year", each Date.Year([Date])), 34 | InsertQuarterOfYear = Table.AddColumn(InsertYear, "Quarter Of Year", each Date.QuarterOfYear([Date])), 35 | InsertMonthOfYear = Table.AddColumn(InsertQuarterOfYear, "Month Of Year", each Date.Month([Date])), 36 | InsertDayOfMonth = Table.AddColumn(InsertMonthOfYear, "Day Of Month", each Date.Day([Date])), 37 | InsertDayOfWeek = Table.AddColumn(InsertDayOfMonth, "Day Of Week", each Date.DayOfWeek([Date])), 38 | InsertDateAlternateKey = Table.AddColumn(InsertDayOfWeek, "Date Alternate Key", each [Year] * 10000 + [Month Of Year] * 100 + [Day Of Month]), 39 | InsertMonthName = Table.AddColumn(InsertDateAlternateKey, "Month Name", each Date.ToText([Date], "MMMM", Culture), type text), 40 | InsertMonthKey = Table.AddColumn(InsertMonthName, "Month Key", each [Year] * 100 + [Month Of Year]), 41 | InsertMonthYear = Table.AddColumn(InsertMonthKey, "Month Year", each (try(Text.Range([Month Name],0,3)) otherwise [Month Name]) & " " & Number.ToText([Year])), 42 | InsertMonthStart = Table.AddColumn(InsertMonthYear, "Month Start", each Date.StartOfMonth([Date]), type date), 43 | InsertMonthEnd = Table.AddColumn(InsertMonthStart, "Month Ending", each Date.EndOfMonth([Date]), type date), 44 | InsertQuarterName = Table.AddColumn(InsertMonthEnd, "Quarter Name", each "Q" & Number.ToText([Quarter Of Year])), 45 | InsertQuarterKey = Table.AddColumn(InsertQuarterName, "Quarter Key", each [Year] * 100 + [Quarter Of Year]), 46 | InsertQuarterYear = Table.AddColumn(InsertQuarterKey, "Quarter Year", each "Q" & Number.ToText([Quarter Of Year]) & " " & Number.ToText([Year])), 47 | InsertDayName = Table.AddColumn(InsertQuarterYear, "Day Of Week Name", each Date.ToText([Date], "dddd", Culture), type text), 48 | InsertWeekEnding = Table.AddColumn(InsertDayName, "Week Ending", each Date.EndOfWeek([Date]), type date), 49 | 50 | //Add Relative Date Positions. 51 | InsertRelativeYear = Table.AddColumn(InsertWeekEnding, "Relative Year", each [Year]-Date.Year(CurrentDate)), 52 | InsertRelativeYearDescription = Table.AddColumn(InsertRelativeYear, "Relative Year Description", 53 | each if [Relative Year] = 0 then "Current Year" 54 | else if [Relative Year] = -1 then "Last Year" 55 | else if [Relative Year] = 1 then "Next Year" 56 | else if [Relative Year] < -1 then Number.ToText(Number.Abs([Relative Year])) & " Years Back" 57 | else Number.ToText([Relative Year]) & " Years Ahead"), 58 | InsertRelativeQuarter = Table.AddColumn(InsertRelativeYearDescription, "Relative Quarter", 59 | each 4*([Year]-Date.Year(CurrentDate)) + ([Quarter Of Year]-Date.QuarterOfYear(CurrentDate))), 60 | InsertRelativeQuarterDescription = Table.AddColumn(InsertRelativeQuarter, "Relative Quarter Description", 61 | each if [Relative Quarter] = 0 then "Current Quarter" 62 | else if [Relative Quarter] = -1 then "Last Quarter" 63 | else if [Relative Quarter] = 1 then "Next Quarter" 64 | else if [Relative Quarter] < -1 then Number.ToText(Number.Abs([Relative Quarter])) & " Quarters Back" 65 | else Number.ToText([Relative Quarter]) & " Quarters Ahead"), 66 | InsertRelativeMonth = Table.AddColumn(InsertRelativeQuarterDescription, "Relative Month", 67 | each 12*([Year]-Date.Year(CurrentDate)) + ([Month Of Year]-Date.Month(CurrentDate))), 68 | InsertRelativeMonthDescription = Table.AddColumn(InsertRelativeMonth, "Relative Month Description", 69 | each if [Relative Month] = 0 then "Current Month" 70 | else if [Relative Month] = -1 then "Last Month" 71 | else if [Relative Month] = 1 then "Next Month" 72 | else if [Relative Month] < -1 then Number.ToText(Number.Abs([Relative Month])) & " Months Back" 73 | else Number.ToText([Relative Month]) & " Months Ahead"), 74 | InsertRelativeWeek = Table.AddColumn(InsertRelativeMonthDescription, "Relative Week", 75 | each Duration.Days(Duration.From([Week Ending]-Date.EndOfWeek(CurrentDate)))/7), 76 | InsertRelativeWeekDescription = Table.AddColumn(InsertRelativeWeek, "Relative Week Description", 77 | each if [Relative Week] = 0 then "Current Week" 78 | else if [Relative Week] = -1 then "Last Week" 79 | else if [Relative Week] = 1 then "Next Week" 80 | else if [Relative Week] < -1 then Number.ToText(Number.Abs([Relative Week])) & " Weeks Back" 81 | else Number.ToText([Relative Week]) & " Weeks Ahead"), 82 | InsertRelativeDay = Table.AddColumn(InsertRelativeWeekDescription, "Relative Day", 83 | each Duration.Days(Duration.From([Date]-CurrentDate))), 84 | InsertRelativeDayDescription = Table.AddColumn(InsertRelativeDay, "Relative Day Description", 85 | each if [Relative Day] = 0 then "Current Day" 86 | else if [Relative Day] = -1 then "Last Day" 87 | else if [Relative Day] = 1 then "Next Day" 88 | else if [Relative Day] < -1 then Number.ToText(Number.Abs([Relative Day])) & " Days Back" 89 | else Number.ToText([Relative Day]) & " Days Ahead"), 90 | 91 | //Add Date Category Positions. 92 | InsertYearGroup = Table.AddColumn(InsertRelativeDayDescription, "Year Group", 93 | each if [Relative Year] = 0 then "Current Year" 94 | else if [Relative Year] < 0 then "Past Years" 95 | else "Future Years"), 96 | InsertQuarterGroup = Table.AddColumn(InsertYearGroup, "Quarter Group", 97 | each if [Relative Quarter] = 0 then "Current Quarter" 98 | else if [Relative Quarter] < 0 then "Past Quarters" 99 | else "Future Quarters"), 100 | InsertMonthGroup = Table.AddColumn(InsertQuarterGroup, "Month Group", 101 | each if [Relative Month] = 0 then "Current Month" 102 | else if [Relative Month] < 0 then "Past Months" 103 | else "Future Months"), 104 | InsertWeekGroup = Table.AddColumn(InsertMonthGroup, "Week Group", 105 | each if [Relative Week] = 0 then "Current Week" 106 | else if [Relative Week] < 0 then "Past Weeks" 107 | else "Future Weeks"), 108 | InsertDayGroup = Table.AddColumn(InsertWeekGroup, "Day Group", 109 | each if [Relative Day] = 0 then "Current Day" 110 | else if [Relative Day] < 0 then "Past Days" 111 | else "Future Days"), 112 | ChangedType2 = Table.TransformColumnTypes(InsertDayGroup,{{"Year", Int64.Type}, {"Quarter Of Year", Int64.Type}, {"Month Of Year", Int64.Type}, {"Day Of Month", Int64.Type}, {"Day Of Week", Int64.Type}, {"Date Alternate Key", Int64.Type}, {"Quarter Name", type text}, {"Month Year", type text}, {"Quarter Year", type text}, {"Relative Year Description", type text}, {"Relative Quarter Description", type text}, {"Relative Month Description", type text}, {"Relative Week Description", type text}, {"Relative Day Description", type text}, {"Year Group", type text}, {"Quarter Group", type text}, {"Month Group", type text}, {"Week Group", type text}, {"Day Group", type text}, {"Relative Day", Int64.Type}, {"Relative Week", Int64.Type}, {"Relative Month", Int64.Type}, {"Relative Quarter", Int64.Type}, {"Relative Year", Int64.Type}, {"Quarter Key", Int64.Type}, {"Month Key", Int64.Type}}), 113 | 114 | //Add Fiscal Periods 115 | 116 | InsertFiscalYear = Table.AddColumn(ChangedType2, "Fiscal Year", each Date.ToText(Date.AddMonths([Date], 6), "yyyy")), 117 | InsertPeriod = Table.AddColumn(InsertFiscalYear, "Period", each Date.ToText(Date.AddMonths([Date], 6), "yyyyMM")), 118 | InsertPeriodFyStart = Table.AddColumn(InsertPeriod, "Fiscal Year Period Start", each Date.ToText(Date.AddMonths([Date], 6), "yyyy01")), 119 | InsertPeriodFyEnd = Table.AddColumn(InsertPeriodFyStart, "Fiscal Year Period End", each Date.ToText(Date.AddMonths([Date], 6), "yyyy12")), 120 | InsertFiscalYearQuarterOfYear = Table.AddColumn(InsertPeriodFyEnd, "Fiscal Year Quarter", each Date.QuarterOfYear(Date.AddMonths([Date], 6))) 121 | in 122 | InsertFiscalYearQuarterOfYear -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/Calendar_FY.M: -------------------------------------------------------------------------------- 1 | let 2 | //Set the following variables 3 | Culture = "English (United States)", //Select a culture. 4 | 5 | //Figure the Start and End Dates, based on above variables 6 | CurrentDate = DateTime.Date(DateTime.LocalNow()), 7 | CurrentYear = Date.Year(CurrentDate), 8 | PreviousYear = Date.Year(CurrentDate) - 2, 9 | StartDate = if CurrentDate < #date(PreviousYear, 7, 1 ) then #date(PreviousYear - 1, 7, 1 ) else #date(PreviousYear, 7, 1 ), 10 | EndDate = if CurrentDate > #date(CurrentYear, 6, 30 ) then #date(CurrentYear + 1, 6, 30 ) else #date(CurrentYear, 6, 30 ), 11 | DayCount = Duration.Days(Duration.From(EndDate - StartDate)) + 1, 12 | 13 | //Get complete list of dates, Convert to a table, update name and data type 14 | AllDates = List.Dates(StartDate, DayCount, #duration(1,0,0,0)), 15 | TableFromList = Table.FromList(AllDates, Splitter.SplitByNothing()), 16 | ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}), 17 | RenamedColumns = Table.RenameColumns(ChangedType, {{"Column1", "Date"}}), 18 | 19 | //Add Fiscal Time Groups 20 | InsertFiscalYear = Table.AddColumn(RenamedColumns, "Fiscal Year", each Date.ToText(Date.AddMonths([Date], 6), "yyyy")), 21 | InsertNextFiscalYear = Table.AddColumn(InsertFiscalYear, "Next Fiscal Year", each Date.ToText(Date.AddMonths([Date], 18), "yyyy")), 22 | InsertPeriod = Table.AddColumn(InsertNextFiscalYear, "Period", each Date.ToText(Date.AddMonths([Date], 6), "yyyyMM")), 23 | InsertNextFYPeriod = Table.AddColumn(InsertPeriod, "Next FY Period", each Date.ToText(Date.AddMonths([Date], 18), "yyyyMM")), 24 | InsertPeriodFyStart = Table.AddColumn(InsertNextFYPeriod, "Fiscal Year Period Start", each Date.ToText(Date.AddMonths([Date], 6), "yyyy01")), 25 | InsertPeriodFyEnd = Table.AddColumn(InsertPeriodFyStart, "Fiscal Year Period End", each Date.ToText(Date.AddMonths([Date], 6), "yyyy12")), 26 | InsertFiscalYearQuarterOfYear = Table.AddColumn(InsertPeriodFyEnd, "Fiscal Year Quarter Nbr", each Date.QuarterOfYear(Date.AddMonths([Date], 6))), 27 | InsertNextFiscalYearQuarterOfYear = Table.AddColumn(InsertFiscalYearQuarterOfYear, "Next Fiscal Year Quarter Nbr", each Date.QuarterOfYear(Date.AddMonths([Date], 18))), 28 | InsertStartOfMonth = Table.AddColumn(InsertNextFiscalYearQuarterOfYear, "Start of Month", each Date.StartOfMonth([Date])), 29 | InsertNextFYStartOfMonth = Table.AddColumn(InsertStartOfMonth, "Next FY Start of Month", each Date.StartOfMonth(Date.AddMonths([Date], 12))), 30 | InsertWeekEnding = Table.AddColumn(InsertNextFYStartOfMonth, "Week Ending", each Date.EndOfWeek([Date])), 31 | InsertFYQtr = Table.AddColumn(InsertWeekEnding, "Fiscal Year Quarter", each "FY" & Text.Combine({Text.From([Fiscal Year]), Text.From([Fiscal Year Quarter Nbr], "en-AU")}, " Q"), type text), 32 | InsertNextFYQtr = Table.AddColumn(InsertFYQtr, "Next Fiscal Year Quarter", each "FY" & Text.Combine({[Next Fiscal Year], Text.From([Next Fiscal Year Quarter Nbr], "en-AU")}, " Q"), type text), 33 | InsertIsFuture = Table.AddColumn(InsertNextFYQtr, "Is Future", each if [Date] > CurrentDate then 1 else 0), 34 | InsertIsCurrentFY = Table.AddColumn(InsertIsFuture, "Is Current FY", each if [Fiscal Year] = Date.ToText(Date.AddMonths(CurrentDate, 6), "yyyy") then 1 else 0), 35 | #"Filtered Rows" = Table.SelectRows(InsertIsCurrentFY, each true), 36 | #"Changed Type" = Table.TransformColumnTypes(#"Filtered Rows",{{"Start of Month", type date}, {"Next FY Start of Month", type date}, {"Week Ending", type date}}) 37 | in 38 | #"Changed Type" -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/SN Ticket Id.M: -------------------------------------------------------------------------------- 1 | let 2 | Source = Json.Document(Web.Contents(servicenow_url & "/api/now/table/task?sysparm_query=sys_class_nameINsc_req_item,incident&assignment_group=" & assignment_group & "&numberISNOTEMPTY&sysparm_exclude_reference_link=true&sysparm_fields=sys_id%2Cactive%2Capproval_set%2Cclosed_at%2Cdue_date%2Cnumber%2Copened_at%2Cshort_description%2Csla_due%2Csys_class_name%2Csys_created_on%2Csys_updated_on%2Cu_service_area%2Curgency%2Cdescription%2Cassignment_group%2Cu_requestor%2Cassigned_to%2Cstate%2Cu_affected_user%2Cu_request_subcategory")), 3 | #"Converted to Table" = Record.ToTable(Source), 4 | #"Expanded List to Column" = Table.ExpandListColumn(#"Converted to Table", "Value"), 5 | #"Expand Record to Column" = Table.ExpandRecordColumn(#"Expanded List to Column", "Value", {"source", "sys_id", "u_affected_user", "u_requestor"}) 6 | in 7 | #"Expand Record to Column" -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/SN Ticket Subcategory.M: -------------------------------------------------------------------------------- 1 | let 2 | Source = Json.Document(Web.Contents(servicenow_url & "/api/now/table/sc_req_item?sysparm_display_value=true&sysparm_query=sys_class_nameINsc_req_item,incident&assignment_group=" & assignment_group & "&numberISNOTEMPTY&&sysparm_exclude_reference_link=true&sysparm_fields=number%2Cu_request_subcategory")), 3 | #"Converted to Table" = Record.ToTable(Source), 4 | #"Expanded List to Column" = Table.ExpandListColumn(#"Converted to Table", "Value"), 5 | #"Expand Record to Column" = Table.ExpandRecordColumn(#"Expanded List to Column", "Value", {"number", "u_request_subcategory"}, {"number", "u_request_subcategory"}), 6 | #"Renamed Columns" = Table.RenameColumns(#"Expand Record to Column",{{"u_request_subcategory", "Subcategory"}, {"number", "Ticket Number"}}) 7 | in 8 | #"Renamed Columns" -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/SN Ticket User.M: -------------------------------------------------------------------------------- 1 | let 2 | Source = Json.Document(Web.Contents(servicenow_url & "/api/now/table/sys_user")), 3 | #"Converted to Table" = Record.ToTable(Source), 4 | #"Expanded List to Column" = Table.ExpandListColumn(#"Converted to Table", "Value"), 5 | #"Expand Record to Column" = Table.ExpandRecordColumn(#"Expanded List to Column", "Value", {"sys_created_on", "sys_id", "user_name"}), 6 | #"Lowercased Text" = Table.TransformColumns(#"Expand Record to Column",{{"user_name", Text.Lower, type text}}), 7 | #"Changed Type" = Table.TransformColumnTypes(#"Lowercased Text",{{"sys_created_on", type datetime}}), 8 | #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Name"}) 9 | in 10 | #"Removed Columns" -------------------------------------------------------------------------------- /Miscellaneous/Scripts/M/SN Ticket.M: -------------------------------------------------------------------------------- 1 | //set the parameter "servicenow_url" e.g. https://your_company.service-now.com/ 2 | // * NOTE: all M files with the prefix SN are required to run this query 3 | 4 | let 5 | // Rest API connection will time out if the return recordset it to large. Edit the column list here and in the "Expand Record to Column" step. 6 | // To build this script go to your instance /nav_to.do?uri=%2F$restapi.do 7 | Source = Json.Document(Web.Contents(servicenow_url & "/api/now/table/task?sysparm_limit=1000000&sysparm_display_value=true&sysparm_query=sys_class_nameINsc_req_item,incident&assignment_group=" & assignment_group & "&sys_created_on>=2020-07-01&numberISNOTEMPTY&sysparm_exclude_reference_link=true&sysparm_fields=sys_id%2Cactive%2Capproval_set%2Cclosed_at%2Cdue_date%2Cnumber%2Copened_at%2Cshort_description%2Csla_due%2Csys_class_name%2Csys_created_on%2Csys_updated_on%2Cu_service_area%2Curgency%2Cassignment_group%2Cu_requestor%2Cassigned_to%2Cstate%2Cu_affected_user%2Cdescription%2Cu_request_subcategory")), 8 | //Source = Json.Document(Web.Contents(servicenow_url & "/api/now/table/task?sysparm_limit=1000000&sysparm_display_value=true&sysparm_query=sys_class_nameINsc_req_item,incident&assignment_groupINSalesForce,SalesForce Development&numberISNOTEMPTY&sysparm_exclude_reference_link=true&sysparm_fields=sys_id,active,approval_set,closed_at,due_date,number,opened_at,short_description,sla_due,sys_class_name,sys_created_on,sys_updated_on,u_service_area,urgency,assignment_group,u_requestor,assigned_to,state,u_affected_user,u_request_subcategory")), 9 | #"Converted to Table" = Record.ToTable(Source), 10 | #"Expanded List to Column" = Table.ExpandListColumn(#"Converted to Table", "Value"), 11 | #"Expand Record to Column" = Table.ExpandRecordColumn(#"Expanded List to Column", "Value", {"sys_id", "active", "approval_set", "closed_at", "due_date", "number", "opened_at", "short_description", "description", "sla_due", "sys_class_name", "sys_created_on", "sys_updated_on", "u_service_area", "urgency", "assignment_group","u_requestor", "assigned_to", "state", "u_affected_user", "u_request_subcategory"}, {"sys_id", "active", "approval_set", "closed_at", "due_date", "number", "opened_at", "short_description", "description", "sla_due", "sys_class_name", "sys_created_on", "sys_updated_on", "u_service_area", "urgency", "assignment_group", "u_requestor","assigned_to", "state", "u_affected_user", "u_request_subcategory"}), 12 | #"Replaced UNKNOWN" = Table.ReplaceValue(#"Expand Record to Column","UNKNOWN","",Replacer.ReplaceText,{"sla_due"}), 13 | #"Changed Type DateTime" = Table.TransformColumnTypes(#"Replaced UNKNOWN",{{"closed_at", type datetime}, {"due_date", type datetime}, {"opened_at", type datetime}, {"sys_created_on", type datetime}, {"sys_updated_on", type datetime}, {"sla_due", type datetime}, {"approval_set", type datetime}}), 14 | #"Changed Type Date" = Table.TransformColumnTypes(#"Changed Type DateTime",{{"sys_created_on", type date}}), 15 | #"Replaced Value Active" = Table.ReplaceValue(#"Changed Type Date",each [active],each if [active] = "false" or [state] = "Cancelled" or [state] = "Closed" or [state] = "Completed" or [state] = "Resolved" or [state] = "Resolved Pending Confirmation" then "Closed" else "Open",Replacer.ReplaceValue,{"active"}), 16 | #"Replaced Value Closed Date" = Table.ReplaceValue(#"Replaced Value Active",each [closed_at], each if [closed_at] = null and [active] = "Closed" then [sys_updated_on] else if [closed_at] <> null and Date.AddDays([closed_at], closed_date_offset) > [sys_created_on] then Date.AddDays([closed_at], -3) else [closed_at], Replacer.ReplaceValue,{"closed_at"}), 17 | #"Changed Type Date for Created Date" = Table.TransformColumnTypes(#"Replaced Value Closed Date" ,{{"closed_at", type date}}), 18 | #"Duplicated Column sys_class_name" = Table.DuplicateColumn(#"Changed Type Date for Created Date", "sys_class_name", "sys_class_name_org"), 19 | #"Replaced Value sys_class_name Requested Item" = Table.ReplaceValue(#"Duplicated Column sys_class_name","Requested Item","sc_req_item",Replacer.ReplaceText,{"sys_class_name_org"}), 20 | #"Replaced Value sys_class_name Incident" = Table.ReplaceValue(#"Replaced Value sys_class_name Requested Item","Incident","incident",Replacer.ReplaceText,{"sys_class_name_org"}), 21 | #"Create Hyperlink" = Table.AddColumn(#"Replaced Value sys_class_name Incident", "ticket_url", each servicenow_url & "nav_to.do?uri=" & [sys_class_name_org] & ".do?sysparm_query=number=" & [number]), 22 | #"Replaced Missing Assigned" = Table.ReplaceValue(#"Create Hyperlink","","",Replacer.ReplaceValue,{"assigned_to"}), 23 | #"Replaced Missing Urgency" = Table.ReplaceValue(#"Replaced Missing Assigned","","",Replacer.ReplaceValue,{"urgency"}), 24 | #"Replaced Urgency Number to Text" = Table.ReplaceValue(#"Replaced Missing Urgency","(4)","Planned",Replacer.ReplaceText,{"urgency"}), 25 | #"Renamed Columns" = Table.RenameColumns(#"Replaced Urgency Number to Text",{{"closed_at", "Closed Date"}, {"due_date", "Due Date"}, {"opened_at", "Opened Date"}, {"short_description", "Ticket Description"}, {"number", "Ticket Number"}, {"sla_due", "SLA Date"}, {"approval_set", "Approval Date"}, {"sys_class_name", "Ticket Type"}, {"ticket_url", "URL"}, {"u_service_area", "Service Area"}, {"urgency", "Urgency"}, {"sys_created_on", "Created Date"}, {"sys_updated_on", "Updated Date"}, {"assignment_group", "Assignment Group"}, {"assigned_to", "Assigned To"}, {"u_requestor", "Requested By"}, {"state", "Status"}, {"active", "Status Group"}, {"u_affected_user", "Affected User"}}), 26 | #"Added Website" = Table.AddColumn(#"Renamed Columns", "servicenow_url", each servicenow_url), 27 | #"Changed Type Date for Updated Date" = Table.TransformColumnTypes(#"Added Website",{{"Updated Date", type date}}), 28 | #"Replaced Value1" = Table.ReplaceValue(#"Changed Type Date for Updated Date","Requested Item","Request",Replacer.ReplaceText,{"Ticket Type"}), 29 | #"Removed Columns" = Table.RemoveColumns(#"Replaced Value1",{"u_request_subcategory"}), 30 | #"Merged Queries" = Table.NestedJoin(#"Removed Columns", {"Ticket Number"}, #"SN Ticket Subcategory", {"Ticket Number"}, "Ticket Subcategory", JoinKind.LeftOuter), 31 | #"Expanded Ticket Subcategory" = Table.ExpandTableColumn(#"Merged Queries", "Ticket Subcategory", {"Subcategory"}, {"Ticket Subcategory.Subcategory"}), 32 | #"Replaced Value" = Table.ReplaceValue(#"Expanded Ticket Subcategory",null,"Other",Replacer.ReplaceValue,{"Ticket Subcategory.Subcategory"}), 33 | #"Renamed Columns1" = Table.RenameColumns(#"Replaced Value",{{"Ticket Subcategory.Subcategory", "Subcategory"}}), 34 | #"Merged Queries1" = Table.NestedJoin(#"Renamed Columns1", {"sys_id"}, #"SN Ticket Id", {"sys_id"}, "Ticket Ids", JoinKind.LeftOuter), 35 | #"Expanded Ticket Ids" = Table.ExpandTableColumn(#"Merged Queries1", "Ticket Ids", {"u_affected_user", "u_requestor"}, {"Ticket Ids.u_affected_user", "Ticket Ids.u_requestor"}), 36 | #"Merged Queries2" = Table.NestedJoin(#"Expanded Ticket Ids", {"Ticket Ids.u_affected_user"}, #"SN Ticket User", {"sys_id"}, "User Service Now", JoinKind.LeftOuter), 37 | #"Expanded User Service Now" = Table.ExpandTableColumn(#"Merged Queries2", "User Service Now", {"user_name"}, {"User Service Now.user_name"}), 38 | #"Renamed Columns2" = Table.RenameColumns(#"Expanded User Service Now",{{"User Service Now.user_name", "Affected Email"}}), 39 | #"Merged Queries3" = Table.NestedJoin(#"Renamed Columns2", {"Ticket Ids.u_requestor"}, #"SN Ticket User", {"sys_id"}, "User Service Now", JoinKind.LeftOuter), 40 | #"Expanded User Service Now1" = Table.ExpandTableColumn(#"Merged Queries3", "User Service Now", {"user_name"}, {"User Service Now.user_name"}), 41 | #"Renamed Columns3" = Table.RenameColumns(#"Expanded User Service Now1",{{"User Service Now.user_name", "Requestor Email"}}), 42 | #"Removed Columns1" = Table.RemoveColumns(#"Renamed Columns3",{"Ticket Ids.u_affected_user", "Ticket Ids.u_requestor"}), 43 | #"Renamed Columns4" = Table.RenameColumns(#"Removed Columns1",{{"description", "Ticket Description"}, {"Ticket Description", "Ticket Subject"}}), 44 | #"Replaced Value2" = Table.ReplaceValue(#"Renamed Columns4","Please provide any other details relevant to this request = ","",Replacer.ReplaceText,{"Ticket Description"}), 45 | #"Renamed Columns5" = Table.RenameColumns(#"Replaced Value2",{{"Ticket Subject", "Ticket Title"}}) 46 | in 47 | #"Renamed Columns5" 48 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/PowerShell/save_report_snapshots.ps1: -------------------------------------------------------------------------------- 1 | <# 2 | Description: Save SSRS Report Snapshots 3 | 4 | #> 5 | 6 | $sql = " 7 | DECLARE @ReportName NVARCHAR(200) = 'Daily Report'; 8 | DECLARE @FileFormat NVARCHAR(50) = 'CSV'; --HTML5,PPTX,ATOM,HTML4.0,MHTML,IMAGE,EXCEL (for .xls),EXCELOPENXML (for .xlsx),WORD (for .doc),WORDOPENXML (for .docx),CSV,PDF,XML 9 | DECLARE @FileExtn NVARCHAR(50) = 'csv'; 10 | DECLARE @ServerName NVARCHAR(100) = 'https://REPORTS'; 11 | DECLARE @DateFrom DATE = CAST(DATEADD(DAY, -1, GETDATE()) AS DATE); --change to NULL for every snapshot 12 | DECLARE @ExportPath NVARCHAR(200) = 'C:\Temp\'; 13 | 14 | SELECT 15 | --[ReportID] = [c].[itemid] 16 | -- , [ReportName] = [c].[name] 17 | -- , [ReportPath] = [c].[path] 18 | -- , [SnaphsotDate] = FORMAT([h].[snapshotdate], 'dd-MMM-yyyy') 19 | -- , [SnapshotDescription] = [s].[DESCRIPTION] 20 | -- , [SnapshotEffectiveParams] = [s].[effectiveparams] 21 | -- , [SnapshotQueryParams] = [s].[queryparams] 22 | -- , [ScheduleName] = [sc].[name] 23 | -- , [ScheduleNextRunTime] = CONVERT(VARCHAR(20), [sc].[nextruntime], 113) 24 | [ExportFileName] = @ExportPath + REPLACE([c].[name], ' ', '_') + '_' + FORMAT([h].[snapshotdate], 'yyyyMMdd_HHmm') + '.' + @FileExtn 25 | , [SnapshotUrl] = 26 | @ServerName 27 | + '/ReportServer/Pages/ReportViewer.aspx?' 28 | + [c].[path] + '&rs:Command=Render&rs:Format=' 29 | + @FileFormat + '&rs:Snapshot=' 30 | + FORMAT([h].[snapshotdate], 'yyyy-MM-ddTHH:mm:ss') 31 | FROM 32 | [ReportServer].[dbo].[History] AS [h] WITH(NOLOCK) 33 | INNER JOIN [ReportServer].[dbo].[SnapshotData] AS [s] WITH(NOLOCK) ON [h].[snapshotdataid] = [s].[snapshotdataid] 34 | INNER JOIN [ReportServer].[dbo].[Catalog] AS [c] WITH(NOLOCK) ON [c].[itemid] = [h].[reportid] 35 | INNER JOIN [ReportServer].[dbo].[ReportSchedule] AS [rs] WITH(NOLOCK) ON [rs].[reportid] = [h].[reportid] 36 | INNER JOIN [ReportServer].[dbo].[Schedule] AS [sc] WITH(NOLOCK) ON [sc].[scheduleid] = [rs].[scheduleid] 37 | WHERE 38 | 1=1 39 | AND [rs].[reportaction] = 2 40 | AND [c].[Name] = @ReportName 41 | AND (@DateFrom IS NULL OR [h].[snapshotdate] >= CAST(DATEADD(DAY, -1, GETDATE()) AS DATE)) 42 | ORDER BY 43 | [c].[name] 44 | , [h].[snapshotdate]; 45 | ;" 46 | 47 | $server = 'REPORTS'; 48 | $dbs = 'MASTER'; 49 | $dsn = "Data Source=$server; Initial Catalog=$dbs; Integrated Security=SSPI;"; 50 | $cn = New-Object System.Data.SqlClient.SqlConnection($dsn); 51 | 52 | #execute merge statement here with parameters 53 | $cn = New-Object System.Data.SqlClient.SqlConnection($dsn); 54 | $cn.Open(); 55 | 56 | $cmd = $cn.CreateCommand(); 57 | $cmd.CommandText = $sql 58 | $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 59 | $SqlAdapter.SelectCommand = $cmd 60 | $cmd.Connection = $cn 61 | $ds = New-Object System.Data.DataSet 62 | $SqlAdapter.Fill($ds) 63 | $cn.Close() 64 | $Result = $ds.Tables[0] 65 | #$Result 66 | 67 | Foreach ($item in $Result) 68 | { 69 | #Write-Host $item.name 70 | 71 | $SnapshotUrl = $item.SnapshotUrl 72 | $ExportFileName = $item.ExportFileName 73 | (Invoke-WebRequest -Uri $SnapshotUrl -OutFile $ExportFileName -UseDefaultCredentials -TimeoutSec 240); 74 | } 75 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/RSS/Apply_Header_Footer.rss: -------------------------------------------------------------------------------- 1 | Public Sub Main() 2 | '-------------------------------------------------------------------------------------------------------------------- 3 | ' Purpose: Script to apply custom header and footer from a template report to all reports on ReportServer 4 | ' Notes: uses Mgmt2010 endpoint / executable against stand alone or SharePoint integrated instance 5 | ' Save file as .rss extension and run using rs.exe from command line. 6 | ' Reference: https://jaredzagelbaum.wordpress.com/2014/11/14/update-all-ssrs-reportheaders/ 7 | ' https://docs.microsoft.com/en-us/sql/reporting-services/tools/rs-exe-utility-ssrs?view=sql-server-2017 8 | ' Example: rs -s http://localhost/reportserver -i D:\Scripts\Apply_Header_Footer.rss -e Mgmt2010 -v parentFolder="YourReportFolder" 9 | '-------------------------------------------------------------------------------------------------------------------- 10 | Dim reportDefinition As Byte() = Nothing 11 | Dim templateDoc As New System.Xml.XmlDocument 12 | Dim reportDoc As New System.Xml.XmlDocument 13 | Dim nsmanager As New XmlNamespaceManager(templateDoc.NameTable) 14 | Dim templatePath As String = "/_Custom/Template" 15 | Dim templateHeader As System.Xml.XmlElement = Nothing 16 | Dim templateFooter As System.Xml.XmlElement = Nothing 17 | Dim reportHeader As System.Xml.XmlElement = Nothing 18 | Dim reportFooter As System.Xml.XmlElement = Nothing 19 | Dim reportPage As System.Xml.XmlElement = Nothing 20 | nsmanager.AddNamespace("rd", "http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition") 21 | Dim items As CatalogItem() = rs.ListChildren("/", True) 22 | 23 | parentFolder = "/" + parentFolder 24 | 25 | Try 26 | For Each item As CatalogItem In items 27 | If item.TypeName = "Report" And item.Path = templatePath Then 28 | reportDefinition = rs.GetItemDefinition(item.Path) 29 | Dim stream1 As New MemoryStream(reportDefinition) 30 | templateDoc.Load(stream1) 31 | stream1.Dispose() 32 | Exit For 33 | End If 34 | Next 35 | 36 | templateHeader = templateDoc.SelectSingleNode("/rd:Report/rd:ReportSections/rd:ReportSection/rd:Page/rd:PageHeader", nsmanager) 37 | templateFooter = templateDoc.SelectSingleNode("/rd:Report/rd:ReportSections/rd:ReportSection/rd:Page/rd:PageFooter", nsmanager) 38 | 39 | For Each item As CatalogItem In items 40 | If item.TypeName = "Report" And (item.Path.StartsWith(parentFolder)) And Not (item.Name.StartsWith("SubRep")) Then 41 | reportDefinition = rs.GetItemDefinition(item.Path) 42 | Dim stream2 As New MemoryStream(reportDefinition) 43 | Dim outstream2 As New MemoryStream() 44 | reportDoc.Load(stream2) 45 | Console.WriteLine("Report: " + item.Name) 46 | Console.WriteLine("Report Path: " + item.Path) 47 | reportHeader = reportDoc.SelectSingleNode("/rd:Report/rd:ReportSections/rd:ReportSection/rd:Page/rd:PageHeader", nsmanager) 48 | reportFooter = reportDoc.SelectSingleNode("/rd:Report/rd:ReportSections/rd:ReportSection/rd:Page/rd:PageFooter", nsmanager) 49 | reportPage = reportDoc.SelectSingleNode("/rd:Report/rd:ReportSections/rd:ReportSection/rd:Page", nsmanager) 50 | Try 51 | reportHeader.InnerXml = templateHeader.InnerXml 52 | Console.WriteLine("Update Header: " + item.Path) 53 | Catch ex As NullReferenceException 54 | Console.WriteLine("Add Header: " + item.Path) 55 | 56 | '----------TESTING---------- 57 | 'Dim elem As XmlElement = reportDoc.CreateElement("PageHeader") 58 | 'Dim root As XmlNode = reportDoc.DocumentElement 59 | 'root.AppendChild(elem) 60 | 'reportDoc.Save(outstream2) 61 | 'reportHeader = reportDoc.SelectSingleNode("/rd:Report/rd:ReportSections/rd:ReportSection/rd:Page/rd:PageHeader", nsmanager) 62 | 'reportHeader.InnerXml = templateHeader.InnerXml 63 | 64 | 'Dim newHeader As XmlNode = reportDoc.ImportNode(templateHeader.InnerXml, True) 65 | 'reportPage.DocumentElement.AppendChild(newHeader) 66 | 'reportDoc.Save(outstream2) 67 | 68 | 'Dim newHeader As XmlNode = reportDoc.ImportNode(templateHeader.InnerXml, True) 69 | 'reportPage.InsertAfter(templateHeader, reportPage.LastChild) 70 | 71 | 'Dim root As XmlNode = reportDoc.DocumentElement 72 | 'root.AppendChild(templateHeader) 73 | 'Dim elem As System.XML.XmlElement = reportDoc.CreateElement("rd:PageHeader") 74 | 'reportDoc.DocumentElement.AppendChild(elem) 75 | 'reportDoc.Save(Console.Out) 76 | '---------------------------------------------------------------------------------- 77 | 'Dim elem As System.XML.XmlElement = reportDoc.CreateElement("rd:PageHeader") 78 | 'Dim docNodes As System.XML.XmlNodeList = reportDoc.LastChild.ChildNodes() 79 | 80 | 'For Each node As System.XML.XmlNode In docNodes 81 | ' If node.Name = "rd:Page" Then 82 | ' node.AppendChild(elem) 83 | ' End If 84 | 'Next 85 | 'reportDoc.Save(Console.Out) 86 | '----------END TESTING---------- 87 | 88 | End Try 89 | Try 90 | reportFooter.InnerXml = templateFooter.InnerXml 91 | Console.WriteLine("Update Footer: " + item.Path) 92 | Catch ex As NullReferenceException 93 | Console.WriteLine("Add Footer: " + item.Path) 94 | End Try 95 | reportDoc.Save(outstream2) 96 | reportDefinition = outstream2.ToArray() 97 | rs.SetItemDefinition(item.Path, reportDefinition, Nothing) 98 | stream2.Dispose() 99 | outstream2.Dispose() 100 | End If 101 | Next 102 | 103 | Catch ex As Exception 104 | Console.WriteLine(ex.ToString()) 105 | 106 | End Try 107 | 108 | End Sub 109 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/RSS/Backup_Reports.rss: -------------------------------------------------------------------------------- 1 | Public Sub Main() 2 | '-------------------------------------------------------------------------------------------------------------------- 3 | ' Purpose: Script to backup reports from a folder on ReportServer 4 | ' Save file as .rss extension and run using rs.exe from command line. 5 | ' Reference: http://bhushan.extreme-advice.com/back-up-of-ssrs-reports-using-rs-utility/ 6 | ' https://docs.microsoft.com/en-us/sql/reporting-services/tools/rs-exe-utility-ssrs?view=sql-server-2017 7 | ' Example: rs -s http://localhost/reportserver -i D:\Scripts\Backup_Reports.rss -e Mgmt2010 -v backupFolder="D:\Scripts\BackupReports" -v parentFolder="/YourReportFolder" 8 | ' rs -s http://localhost/reportserver -i D:\Scripts\Backup_Reports.rss -e Mgmt2010 -v backupFolder="D:\Scripts\BackupReports" -v parentFolder="" 9 | '-------------------------------------------------------------------------------------------------------------------- 10 | Try 11 | rs.Credentials = System.Net.CredentialCache.DefaultCredentials 12 | Dim items As CatalogItem() = Nothing 13 | 14 | If String.IsNullOrEmpty(parentFolder) Then 15 | items = rs.ListChildren("/", True) 16 | Else 17 | items = rs.ListChildren(parentFolder, False) 18 | End If 19 | 20 | Console.WriteLine() 21 | Console.WriteLine("...Reports Back Up Started...") 22 | 23 | For Each item As CatalogItem In items 24 | If item.TypeName = "Report" 25 | Console.WriteLine(item.Path) 26 | Dim reportPath As String = item.Path 27 | parentFolder = Path.GetDirectoryName(item.Path) ' comment out this line to save the reports in one folder 28 | Dim reportDefinition As Byte() = rs.GetItemDefinition(item.Path) 29 | Dim rdlReport As New System.Xml.XmlDocument 30 | Dim Stream As New MemoryStream(reportDefinition) 31 | Dim backupPath As String = Path.Combine(backupFolder, Date.Now().ToString("yyyy.MM.dd") + "\" + parentFolder) 32 | 33 | If (Not System.IO.Directory.Exists(backupPath)) Then 34 | System.IO.Directory.CreateDirectory(backupPath) 35 | End If 36 | 37 | rdlReport.Load(Stream) 38 | rdlReport.Save(Path.Combine(backupPath, item.Name + ".rdl")) 39 | Console.WriteLine(item.Name + ".rdl") 40 | End If 41 | Next 42 | 43 | Console.WriteLine("...Reports Back Up Completed...") 44 | Console.WriteLine() 45 | 46 | Catch e As Exception 47 | Console.WriteLine(e.Message) 48 | 49 | End Try 50 | 51 | End Sub 52 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/SQL/Report_Datasets.sql: -------------------------------------------------------------------------------- 1 | 2 | WITH 3 | [catalog_xml] 4 | AS 5 | ( 6 | SELECT 7 | * 8 | , [report_folder] = 9 | CASE 10 | WHEN [Path] = '/' + [Name] THEN '' 11 | ELSE SUBSTRING([Path], 2, LEN([Path])-LEN([Name])-2) 12 | END 13 | , [ContentXml] = (CONVERT(XML, CONVERT(VARBINARY(MAX), [Content]))) 14 | FROM 15 | [dbo].[Catalog] WITH(NOLOCK) 16 | WHERE 17 | [Type] = 2 18 | ) 19 | , 20 | [data_sources] 21 | AS 22 | ( 23 | SELECT 24 | [r].[ItemID] 25 | , [r].[LocalDataSourceName] 26 | , [DataProvider] = [r].[DataProvider] 27 | , [ConnectionString] = [r].[ConnectionString] 28 | FROM 29 | ( 30 | SELECT 31 | [c].* 32 | , [LocalDataSourceName] = [DataSourceXml].[value]('@Name', 'NVARCHAR(260)') 33 | , [DataProvider] = [DataSourceXml].[value]('(*:ConnectionProperties/*:DataProvider)[1]', 'NVARCHAR(260)') 34 | , [ConnectionString] = [DataSourceXml].[value]('(*:ConnectionProperties/*:ConnectString)[1]', 'NVARCHAR(MAX)') 35 | FROM 36 | [catalog_xml] AS [c] 37 | CROSS APPLY [ContentXml].[nodes]('/*:Report/*:DataSources/*:DataSource') AS [DataSource]([DataSourceXml]) 38 | WHERE [c].[Type] = 2 -- limit to reports only 39 | ) AS [r] 40 | ) 41 | , 42 | [datasets] 43 | AS 44 | ( 45 | SELECT 46 | [ItemID] 47 | , [DataSetName] = [QueryXml].[value]('@Name', 'NVARCHAR(256)') 48 | , [DataSourceName] = [QueryXml].[value]('(*:Query/*:DataSourceName)[1]', 'NVARCHAR(260)') 49 | , [CommandType] = [QueryXml].[value]('(*:Query/*:CommandType)[1]', 'NVARCHAR(15)') 50 | , [CommandText] = [QueryXml].[value]('(*:Query/*:CommandText)[1]', 'NVARCHAR(MAX)') 51 | , [report_folder] 52 | FROM 53 | [catalog_xml] 54 | CROSS APPLY [ContentXml].[nodes]('/*:Report/*:DataSets/*:DataSet') AS [QueryData]([QueryXml]) 55 | ) 56 | SELECT 57 | [Name] 58 | , [Path] 59 | , [LocalDataSourceName] 60 | , [DataSetName] 61 | , [CommandType] = ISNULL([CommandType], 'Text') 62 | , [CommandText] 63 | FROM 64 | [datasets] AS [ds] 65 | INNER JOIN [data_sources] AS [src] ON [src].[ItemID] = [ds].[ItemID] AND [src].[LocalDataSourceName] = [ds].[DataSourceName] 66 | INNER JOIN [dbo].[Catalog] AS [c] WITH(NOLOCK) ON [ds].[ItemID] = [c].[ItemID] 67 | WHERE 68 | 1=1 69 | --AND ds.[report_folder] NOT IN('Analytics') 70 | ORDER BY 71 | [Path]; 72 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/SQL/Report_Linked.sql: -------------------------------------------------------------------------------- 1 | 2 | SELECT 3 | [Original_Report] = [prt].[Path] 4 | , [Linked_Report] = [rpt].[Path] 5 | FROM 6 | [dbo].[Catalog](NOLOCK) AS [rpt] 7 | INNER JOIN [dbo].[Users](NOLOCK) AS [urm] ON [rpt].[ModifiedById] = [urm].[UserID] 8 | LEFT JOIN [dbo].[Catalog](NOLOCK) AS [prt] ON [prt].[ItemID] = [rpt].[LinkSourceID] 9 | WHERE 10 | 1 = 1 11 | AND [rpt].[Type] IN(4); 12 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/SQL/Report_Snapshots.sql: -------------------------------------------------------------------------------- 1 | CREATE PROCEDURE [admin].[report_snapshots] 2 | ( 3 | @ReportName AS NVARCHAR(50) = NULL 4 | , @ReportFormat AS NVARCHAR(50) = 'EXCELOPENXML' 5 | ) 6 | AS 7 | 8 | BEGIN 9 | 10 | --EXEC [admin].[report_snapshots] @ReportName = 'Report Name Here', @ReportFormat = 'EXCELOPENXML' --current version of Excel 11 | --EXEC [admin].[report_snapshots] @ReportName = 'Report Name Here', @ReportFormat = 'PDF' 12 | --EXEC [admin].[report_snapshots] @ReportName = NULL, @ReportFormat = 'PDF' --all snapshots for every report 13 | 14 | SELECT 15 | [ReportName] = [c].[Name] 16 | , [SnaphsotDate] = FORMAT([h].[snapshotdate], 'dd-MMM-yyyy') 17 | , [FileName] = FORMAT([h].[snapshotdate], 'yyyyMMdd') 18 | , [Url_Download] = 'http://' + @@SERVERNAME + '/ReportServer/Pages/ReportViewer.aspx?' + [c].[path] + '&rs:Command=Render&rs:Format=' + @ReportFormat + '&rs:Snapshot=' + FORMAT([h].[snapshotdate], 'yyyy-MM-ddTHH:mm:ss') 19 | , [Url_Open] = 'http://' + @@SERVERNAME + '/Reports/report' + [c].[path] + '?rs:Snapshot=' + FORMAT([h].[snapshotdate], 'yyyy-MM-ddTHH:mm:ss') 20 | --, [SnapshotDescription] = [s].[DESCRIPTION] 21 | --, [SnapshotEffectiveParams] = [s].[effectiveparams] 22 | --, [SnapshotQueryParams] = [s].[queryparams] 23 | --, [ScheduleName] = [sc].[name] 24 | --, [ScheduleNextRunTime] = [sc].[nextruntime] 25 | FROM 26 | [dbo].[History] AS [h] (NOLOCK) 27 | INNER JOIN [dbo].[SnapshotData] AS [s] (NOLOCK) ON [h].[snapshotdataid] = [s].[snapshotdataid] 28 | INNER JOIN [dbo].[Catalog] AS [c] (NOLOCK) ON [c].[itemid] = [h].[reportid] 29 | INNER JOIN [dbo].[ReportSchedule] AS [rs] (NOLOCK) ON [rs].[reportid] = [h].[reportid] 30 | INNER JOIN [dbo].[Schedule] AS [sc] (NOLOCK) ON [sc].[scheduleid] = [rs].[scheduleid] 31 | WHERE 32 | 1=1 33 | AND [rs].[reportaction] = 2 -- Create schedule 34 | AND (@ReportName IS NULL OR [c].[Name] = @ReportName) 35 | ORDER BY 36 | [c].[name] 37 | , [h].[snapshotdate]; 38 | 39 | END 40 | 41 | GO 42 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/SQL/Report_Subreports.sql: -------------------------------------------------------------------------------- 1 | WITH 2 | [content_binaries] 3 | AS 4 | ( 5 | SELECT 6 | [cat].[ItemID] 7 | , [cat].[Name] 8 | , [cat].[Path] 9 | , [cat].[Type] 10 | , [TypeDescription] = 11 | CASE [cat].[Type] 12 | WHEN 2 THEN 'Report' 13 | WHEN 5 THEN 'Data Source' 14 | WHEN 7 THEN 'Report Part' 15 | WHEN 8 THEN 'Shared Dataset' 16 | ELSE 'Other' 17 | END 18 | , [Content] = CONVERT(VARBINARY(MAX), [cat].[Content]) 19 | FROM 20 | [dbo].[Catalog] AS [cat] 21 | WHERE 22 | 1=1 23 | AND [cat].[Content] IS NOT NULL 24 | AND [cat].[Type] = 2 25 | ) 26 | , 27 | [content_binaries_format] 28 | AS 29 | ( 30 | SELECT 31 | [bin].[ItemID] 32 | , [bin].[Name] 33 | , [bin].[Path] 34 | , [bin].[Type] 35 | , [bin].[TypeDescription] 36 | , [Content] = --strip off the BOM if it exist 37 | CASE 38 | WHEN LEFT([bin].[Content], 3) = 0xEFBBBF THEN CONVERT(VARBINARY(MAX), SUBSTRING([bin].[Content], 4, LEN([bin].[Content]))) 39 | ELSE [bin].[Content] 40 | END 41 | FROM 42 | [content_binaries] AS [bin] 43 | ) 44 | SELECT 45 | [cbf].[ItemID] 46 | , [cbf].[Name] 47 | , [cbf].[Path] 48 | , [cbf].[Type] 49 | , [cbf].[TypeDescription] 50 | , [cbf].[Content] 51 | , [ContentVarchar] = CONVERT(VARCHAR(MAX), [cbf].[Content]) 52 | , [ContentXML] = CONVERT(XML, [cbf].[Content]) 53 | FROM 54 | [content_binaries_format] AS [cbf] 55 | WHERE 56 | 1=1 57 | AND CONVERT(VARCHAR(MAX), [cbf].[Content]) LIKE '%', '_'), '"', '-') 12 | , [file_extention] = REPLACE(RIGHT([v].[FullPath], 5), '\', '') 13 | , [v].[ItemId] 14 | , [VersionFrom] = MAX(v.[VersionFrom]) 15 | FROM 16 | [TFS].[dbo].[tbl_Version] (NOLOCK) AS v 17 | WHERE 18 | 1=1 19 | AND [v].[FullPath] LIKE CONCAT(@TfsSsrsPath, '%') 20 | GROUP BY 21 | [v].[FullPath] 22 | , [v].[ItemId] 23 | ) 24 | , 25 | inactive_version 26 | AS 27 | ( 28 | SELECT 29 | [v].[ItemId] 30 | FROM 31 | [TFS].[dbo].[tbl_Version] (NOLOCK) AS v 32 | INNER JOIN current_version AS cv ON [v].[ItemId] = cv.[ItemId] AND cv.[VersionFrom] = [v].[VersionFrom] 33 | WHERE 34 | 1=1 35 | AND [DeletionId] != 0 36 | ) 37 | SELECT 38 | cv.[FullPath] 39 | , cv.[path_name] 40 | , [file_name] = LEFT(cv.[file_name], LEN(cv.[file_name]) - 4) 41 | , cv.[file_extention] 42 | , cv.[ItemId] 43 | , cv.[VersionFrom] 44 | FROM 45 | current_version AS cv 46 | LEFT JOIN inactive_version AS ov ON ov.[ItemId] = cv.[ItemId] 47 | WHERE 48 | 1=1 49 | AND ov.[ItemId] IS NULL 50 | AND cv.[file_extention] = '.rdl'; 51 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/SQL/Unused_Stored_Procedures.sql: -------------------------------------------------------------------------------- 1 | USE [YourDataWarehouse] 2 | GO 3 | 4 | CREATE PROCEDURE [admin].[Unused_Stored_Procedures] 5 | AS 6 | BEGIN 7 | 8 | DROP TABLE IF EXISTS [#pbirs_report_datasets]; 9 | DROP TABLE IF EXISTS [#false_positives]; 10 | 11 | SELECT tbl.* INTO #false_positives FROM (VALUES 12 | ( 'dbo.KeepThisStoredProcedure1') 13 | , ( 'dbo.KeepThisStoredProcedure2') 14 | , ( 'report.KeepThisStoredProcedure1') 15 | , ( 'report.KeepThisStoredProcedure2') 16 | ) tbl ([StoredProcedureName]); 17 | 18 | WITH 19 | catalog_xml 20 | AS 21 | ( 22 | SELECT 23 | * 24 | , [report_folder] = 25 | CASE 26 | WHEN [Path] = '/' + [Name] THEN '' 27 | ELSE SUBSTRING([Path], 2, LEN([Path])-LEN([Name])-2) 28 | END 29 | , [ContentXml] = (CONVERT(XML, CONVERT(VARBINARY(MAX), [Content]))) 30 | FROM 31 | [ReportServer].[dbo].[Catalog] WITH(NOLOCK) 32 | WHERE 33 | [Type] = 2 34 | ) 35 | , 36 | data_sources 37 | AS 38 | ( 39 | SELECT 40 | [r].[ItemID] 41 | , [r].[LocalDataSourceName] 42 | , [DataProvider] = [r].[DataProvider] 43 | , [ConnectionString] = [r].[ConnectionString] 44 | FROM 45 | ( 46 | SELECT 47 | [c].* 48 | , [LocalDataSourceName] = [DataSourceXml].value('@Name', 'NVARCHAR(260)') 49 | , [DataProvider] = [DataSourceXml].value('(*:ConnectionProperties/*:DataProvider)[1]', 'NVARCHAR(260)') 50 | , [ConnectionString] = [DataSourceXml].value('(*:ConnectionProperties/*:ConnectString)[1]', 'NVARCHAR(MAX)') 51 | FROM 52 | catalog_xml AS [c] 53 | CROSS APPLY [ContentXml].[nodes]('/*:Report/*:DataSources/*:DataSource') AS [DataSource]([DataSourceXml]) 54 | WHERE [c].[Type] = 2 -- limit to reports only 55 | ) AS [r] 56 | ) 57 | , 58 | datasets 59 | AS 60 | ( 61 | SELECT 62 | [ItemID] 63 | , [DataSetName] = [QueryXml].value('@Name', 'NVARCHAR(256)') 64 | , [DataSourceName] = [QueryXml].value('(*:Query/*:DataSourceName)[1]', 'NVARCHAR(260)') 65 | , [CommandType] = [QueryXml].value('(*:Query/*:CommandType)[1]', 'NVARCHAR(15)') 66 | , [CommandText] = [QueryXml].value('(*:Query/*:CommandText)[1]', 'NVARCHAR(MAX)') 67 | , [report_folder] 68 | FROM 69 | catalog_xml 70 | CROSS APPLY [ContentXml].[nodes]('/*:Report/*:DataSets/*:DataSet') AS [QueryData]([QueryXml]) 71 | ) 72 | SELECT 73 | [Name] 74 | , [Path] 75 | , [LocalDataSourceName] 76 | , [DataSetName] 77 | , [CommandType] = ISNULL([CommandType], 'Text') 78 | , [CommandText] 79 | INTO [#pbirs_report_datasets] 80 | FROM 81 | datasets AS [ds] 82 | INNER JOIN data_sources AS [src] ON [src].[ItemID] = [ds].[ItemID] AND [src].[LocalDataSourceName] = [ds].[DataSourceName] 83 | INNER JOIN [ReportServer].[dbo].[Catalog] AS [c] WITH(NOLOCK) ON [ds].[ItemID] = [c].[ItemID]; 84 | 85 | WITH 86 | report_stored_procedures 87 | AS 88 | ( 89 | SELECT DISTINCT 90 | [StoredProcedureName] = CASE WHEN [CommandText] LIKE 'report.%' THEN [CommandText] ELSE 'dbo.' + [CommandText] END 91 | FROM 92 | [#pbirs_report_datasets] 93 | WHERE 94 | 1 = 1 95 | AND [CommandType] = 'StoredProcedure' 96 | AND [LocalDataSourceName] IN('REPORT_DATA_SOURCE1', 'REPORT_DATA_SOURCE2') 97 | ) 98 | , 99 | database_stored_procedures 100 | AS 101 | ( 102 | SELECT 103 | [SPECIFIC_SCHEMA] 104 | , [SPECIFIC_NAME] 105 | , [StoredProcedureName] = [SPECIFIC_SCHEMA] + '.' + [SPECIFIC_NAME] 106 | , [CreateDate] = [CREATED] 107 | , [ModifiedDate] = [LAST_ALTERED] 108 | FROM [INFORMATION_SCHEMA].[ROUTINES] 109 | WHERE 110 | 1=1 111 | AND [ROUTINE_TYPE] = 'PROCEDURE' 112 | AND 113 | ( 114 | ([SPECIFIC_SCHEMA] = 'dbo' AND [SPECIFIC_NAME] LIKE '%_report_%') 115 | OR 116 | ([SPECIFIC_SCHEMA] = 'report') 117 | ) 118 | ) 119 | SELECT 120 | [dsp].[StoredProcedureName] 121 | , [dsp].[CreateDate] 122 | , [dsp].[ModifiedDate] 123 | FROM 124 | [database_stored_procedures] AS [dsp] 125 | LEFT JOIN [report_stored_procedures] AS [rsp] ON [dsp].[StoredProcedureName] = [rsp].[StoredProcedureName] 126 | LEFT JOIN [#false_positives] AS fp ON [dsp].[StoredProcedureName] = [fp].[StoredProcedureName] 127 | WHERE 128 | 1=1 129 | AND [dsp].[StoredProcedureName] NOT LIKE '%zzz%' 130 | --AND [dsp].[StoredProcedureName] LIKE '%zzz%' 131 | AND [rsp].[StoredProcedureName] IS NULL 132 | AND [fp].[StoredProcedureName] IS NULL 133 | ORDER BY 1; 134 | 135 | DROP TABLE IF EXISTS [#pbirs_report_datasets]; 136 | DROP TABLE IF EXISTS [#false_positives]; 137 | 138 | END 139 | 140 | GO -------------------------------------------------------------------------------- /Miscellaneous/Scripts/SQL/Update_Subscription_Owner.sql: -------------------------------------------------------------------------------- 1 | /*------------------------------------------------------------------------------+ 2 | | Purpose: How to Update the owner of deployed reports and subscriptions 3 | | Note: SQLCmdMode Script 4 | | Reference: http://www.andrewjbillings.com/ssrs-migration-subscriptions-dont-work-if-owner-no-longer-exists/ 5 | +-------------------------------------------------------------------------------- 6 | :setvar _server "Server1" 7 | :setvar _user "***username***" 8 | :setvar _password "***password***" 9 | :setvar _database "ReportServer" 10 | :connect $(_server) -U $(_user) -P $(_password) 11 | USE [$(_database)]; 12 | GO 13 | */ 14 | 15 | :SETVAR OldUser "DOMAIN\OldUserName" 16 | :SETVAR NewUser "DOMAIN\NewUserName" 17 | 18 | SET XACT_ABORT ON; 19 | BEGIN TRANSACTION; 20 | 21 | PRINT '====================================================================='; 22 | PRINT 'Update subscriptions...'; 23 | PRINT '=====================================================================' 24 | 25 | WITH 26 | [new_owner] 27 | AS 28 | ( 29 | SELECT [UserID], [UserName] FROM [dbo].[Users] WHERE [UserName] = N'$(NewUser)' 30 | ) 31 | , 32 | [subscription_source] 33 | AS 34 | ( 35 | SELECT DISTINCT 36 | [s].[Report_OID] 37 | , [OldOwner] = [ou].[UserName] 38 | , [OldOwnerID] = [ou].[UserID] 39 | , [NewOwner] = [nu].[UserName] 40 | , [NewOwnerID] = [nu].[UserID] 41 | FROM 42 | [dbo].[Subscriptions] AS [s] 43 | INNER JOIN [dbo].[Users] AS [ou] ON [ou].[UserID] = [s].[OwnerID] 44 | , [new_owner] AS [nu] 45 | WHERE 46 | 1=1 47 | AND [ou].[UserName] = N'$(OldUser)' 48 | ) 49 | --SELECT * FROM subscription_source 50 | MERGE [dbo].[Subscriptions] AS [T] 51 | USING [subscription_source] AS [S] ON [T].[Report_OID] = [S].[Report_OID] 52 | WHEN MATCHED 53 | THEN UPDATE SET 54 | [T].[OwnerID] = [S].[NewOwnerID] 55 | OUTPUT @@ServerName AS [ServerName], DB_NAME() AS [DatabaseName], $action, [inserted].*, [deleted].*; 56 | 57 | 58 | PRINT '******* ROLLBACK TRANSACTION ******* '; 59 | ROLLBACK TRANSACTION; 60 | 61 | --PRINT '******* COMMIT TRANSACTION ******* '; 62 | --COMMIT TRANSACTION; 63 | 64 | PRINT '====================================================================='; 65 | PRINT 'Finished...'; 66 | PRINT '====================================================================='; 67 | -------------------------------------------------------------------------------- /Miscellaneous/Scripts/VB/CandyStripe.vb: -------------------------------------------------------------------------------- 1 | Private Alt As Boolean 2 | 3 | Public Function CandyStripe(Optional ByVal NewRow As Boolean = False, Optional ByVal OddColor as String = "Beige", Optional ByVal EvenColor as String = "White") As String 4 | '------------------------------------------------------------------------------------------------ 5 | ' Purpose: To candy stripe the detail rows of a report 6 | ' Example: BackgroundColor = Code.CandyStripe() 7 | ' Note: The first column needs a parameter of "True" passed in example: Code.CandyStripe(True) 8 | '------------------------------------------------------------------------------------------------ 9 | If NewRow Then 10 | Alt = Not Alt 11 | End If 12 | 13 | If Alt Then 14 | Return OddColor 15 | Else 16 | Return EvenColor 17 | End If 18 | 19 | End Function -------------------------------------------------------------------------------- /Miscellaneous/Scripts/VB/CopyNodes.vb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Scripts/VB/CopyNodes.vb -------------------------------------------------------------------------------- /Miscellaneous/Scripts/VB/GetParameterandValues.vb: -------------------------------------------------------------------------------- 1 | Public Function GetParameterandValues(ByVal ServerName As String, ByVal ReportServerDBName As String, ByVal ReportName As String, ByVal ReportParameters As Parameters) As String 2 | 3 | Try 4 | 5 | Dim ConnStr As String 6 | Dim SQL As String 7 | 8 | Dim Param As Parameter 9 | Dim ParameterOutput As String 10 | Dim ParameterName As String 11 | Dim ParameterValue As String 12 | Dim ParameterLabel As String 13 | 14 | Dim SQLConn As System.Data.SqlClient.SqlConnection 15 | Dim SQLCmd As System.Data.SqlClient.SqlCommand 16 | Dim SQLRdr As System.Data.SqlClient.SqlDataReader 17 | 18 | ParameterOutput = "" 19 | ParameterName = "" 20 | ParameterValue = "" 21 | ParameterLabel = "" 22 | 23 | ConnStr = "Data Source=" + ServerName + ";Initial Catalog=" + ReportServerDBName + ";Integrated Security=SSPI;" 24 | 25 | SQLConn = New System.Data.SqlClient.SqlConnection() 26 | SQLCmd = New System.Data.SqlClient.SqlCommand() 27 | 28 | SQLConn.ConnectionString = ConnStr 29 | SQLConn.Open() 30 | 31 | SQL = "SELECT Name = Paravalue.value('Name[1]', 'VARCHAR(250)') FROM (SELECT C.Name,CONVERT(XML,C.Parameter) AS ParameterXML FROM ReportServer.dbo.Catalog C WHERE C.Content is not null AND C.Type = 2 AND C.Name = '" + ReportName + "') a CROSS APPLY ParameterXML.nodes('//Parameters/Parameter') p ( Paravalue )" 32 | SQLCmd.Connection = SQLConn 33 | SQLCmd.CommandType = System.Data.CommandType.Text 34 | SQLCmd.CommandText = SQL 35 | 36 | SQLRdr = SQLCmd.ExecuteReader() 37 | 38 | While SQLRdr.Read() 39 | 40 | ParameterName = SQLRdr("Name") 41 | Param = ReportParameters(ParameterName) 42 | 43 | ParameterOutput = ParameterOutput + System.Environment.NewLine + ParameterName + Space(30 - Len(ParameterName)) + ": " 44 | 45 | 46 | If Param.IsMultivalue = False Then 47 | ParameterValue = Param.Value 48 | ParameterLabel = Param.Label 49 | If ParameterLabel Is Nothing Then 50 | ParameterOutput = ParameterOutput + ParameterValue 51 | Else 52 | ParameterOutput = ParameterOutput + ParameterLabel 53 | End If 54 | Else 55 | For Mloop As Integer = 0 To Param.Count - 1 56 | ParameterOutput = ParameterOutput + Param.Label(Mloop).ToString() + "-" + Param.Value(Mloop).ToString() 57 | If Not (Mloop = Param.Count - 1) Then 58 | ParameterOutput = ParameterOutput + "," 59 | End If 60 | Next 61 | End If 62 | 63 | End While 64 | 65 | Return (ParameterOutput) 66 | Catch ex As Exception 67 | Return (ex.Message) 68 | End Try 69 | 70 | End Function -------------------------------------------------------------------------------- /Miscellaneous/Scripts/VB/HeatMapColor.vb: -------------------------------------------------------------------------------- 1 | Public Function HeatMapColor(ByVal percent As Double) As String 2 | '------------------------------------------------------------------------------------------------ 3 | ' Purpose: To assign specific colors for a heatmap report 4 | ' Example: BackgroundColor =Code.HeatMapColor(25) 5 | '------------------------------------------------------------------------------------------------ 6 | 7 | Select Case percent 8 | Case Is = 0 9 | HeatMapColor = "Gainsboro" 10 | Case 0 To 24 11 | HeatMapColor = "LightBlue" 12 | Case 25 To 49 13 | HeatMapColor = "Khaki" 14 | Case 50 To 74 15 | HeatMapColor = "Tan" 16 | Case 75 To 100 17 | HeatMapColor = "LightCoral" 18 | End Select 19 | 20 | End Function -------------------------------------------------------------------------------- /Miscellaneous/Scripts/VB/HeatMapColorGradate.vb: -------------------------------------------------------------------------------- 1 | Public Function HeatMapColorGradate( _ 2 | ByVal Value As Double _ 3 | , ByVal MaxPositive As Double _ 4 | , ByVal Neutral As Double _ 5 | , ByVal ColStr As String) As String 6 | '------------------------------------------------------------------------------------------------ 7 | ' Purpose: To use a color gradations on a heatmap report 8 | ' Example: BackgroundColor =Code.HeatMapColorGradate(25, 100, -10, Variables!ColorEventCountGradate.Value) 9 | ' BackgroundColor =Code.HeatMapColorGradate(dayValue, maxValue, 0, "#2322EE") 10 | ' Note: Use a negative number as the "Neutral" number to avoid too light of a color 11 | '------------------------------------------------------------------------------------------------ 12 | Const Shd As Double = 255 13 | Dim ColVar1 As Integer = Convert.ToInt32(Left(Right(ColStr, 6), 2), 16) 14 | Dim ColVar2 As Integer = Convert.ToInt32(Left(Right(ColStr, 4), 2), 16) 15 | Dim ColVar3 As Integer = Convert.ToInt32(Right(ColStr, 2), 16) 'Find Largest Range 'Split the #RGB color to R, G, and B components 16 | Dim decPosRange As Double = Math.Abs(MaxPositive - Neutral) 'Find appropriate color shade 17 | Dim iColor1 As Integer = ColVar1 + CInt(Math.Round((MaxPositive - Value) * ((Shd - ColVar1) / decPosRange))) 18 | Dim iColor2 As Integer = ColVar2 + CInt(Math.Round((MaxPositive - Value) * ((Shd - ColVar2) / decPosRange))) 19 | Dim iColor3 As Integer = ColVar3 + CInt(Math.Round((MaxPositive - Value) * ((Shd - ColVar3) / decPosRange))) 'Return the new color 20 | Dim heatMapColor As String = "#" & iColor1.ToString("X2") & iColor2.ToString("X2") & iColor3.ToString("X2") 'Reduce a shade for each of the R,G,B components 21 | 22 | Return heatMapColor 23 | 24 | End Function -------------------------------------------------------------------------------- /Miscellaneous/Templates/Dashboard Performance.pbit: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Templates/Dashboard Performance.pbit -------------------------------------------------------------------------------- /Miscellaneous/Templates/Template.pbix: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/Miscellaneous/Templates/Template.pbix -------------------------------------------------------------------------------- /ServerReports/Heatmap Calendar.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SQL-Server-projects/Reporting-Services-examples/bff7b0d5a6270af9439819cd86ee486e7fe271a7/ServerReports/Heatmap Calendar.zip -------------------------------------------------------------------------------- /ServerReports/ReportServer.rds: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SQL 5 | Data Source=REPORTS;Initial Catalog=ReportServerPowerBI 6 | true 7 | 8 | cc77ab7a-df14-4f0a-b105-eec2fd7c90af 9 | -------------------------------------------------------------------------------- /ServerReports/ServerReport.rptproj.bak: -------------------------------------------------------------------------------- 1 | 2 | 3 | $base64$PFNvdXJjZUNvbnRyb2xJbmZvIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmRkbDI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yIiB4bWxuczpkZGwyXzI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yLzIiIHhtbG5zOmRkbDEwMF8xMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDA4L2VuZ2luZS8xMDAvMTAwIiB4bWxuczpkZGwyMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAiIHhtbG5zOmRkbDIwMF8yMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAvMjAwIiB4bWxuczpkZGwzMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAiIHhtbG5zOmRkbDMwMF8zMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAvMzAwIiB4bWxuczpkZGw0MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAiIHhtbG5zOmRkbDQwMF80MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAvNDAwIiB4bWxuczpkZGw1MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAiIHhtbG5zOmRkbDUwMF81MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAvNTAwIiB4bWxuczpkd2Q9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRGF0YVdhcmVob3VzZS9EZXNpZ25lci8xLjAiPg0KICA8RW5hYmxlZD5mYWxzZTwvRW5hYmxlZD4NCiAgPFByb2plY3ROYW1lPjwvUHJvamVjdE5hbWU+DQogIDxBdXhQYXRoPjwvQXV4UGF0aD4NCiAgPExvY2FsUGF0aD48L0xvY2FsUGF0aD4NCiAgPFByb3ZpZGVyPjwvUHJvdmlkZXI+DQo8L1NvdXJjZUNvbnRyb2xJbmZvPg== 4 | 5 | 6 | ReportServer.rds 7 | ReportServer.rds 8 | 9 | 10 | 11 | 12 | 13 | Data Sources.rdl 14 | Data Sources.rdl 15 | 16 | 17 | Execution Log.rdl 18 | Execution Log.rdl 19 | 20 | 21 | Heatmap Calendar.rdl 22 | Heatmap Calendar.rdl 23 | 24 | 25 | Permissions.rdl 26 | Permissions.rdl 27 | 28 | 29 | Report Documentation Datasets.rdl 30 | Report Documentation Datasets.rdl 31 | 32 | 33 | Report Documentation Execution Logs.rdl 34 | Report Documentation Execution Logs.rdl 35 | 36 | 37 | Report Documentation Parameters.rdl 38 | Report Documentation Parameters.rdl 39 | 40 | 41 | Report Documentation Permissions.rdl 42 | Report Documentation Permissions.rdl 43 | 44 | 45 | Report Documentation Subscriptions.rdl 46 | Report Documentation Subscriptions.rdl 47 | 48 | 49 | Report Documentation Variables.rdl 50 | Report Documentation Variables.rdl 51 | 52 | 53 | Report Documentation.rdl 54 | Report Documentation.rdl 55 | 56 | 57 | Report List.rdl 58 | Report List.rdl 59 | 60 | 61 | Subscriptions.rdl 62 | Subscriptions.rdl 63 | 64 | 65 | 66 | 67 | Debug 68 | Win32 69 | 70 | bin\Debug 71 | SSRS2016 72 | http://localhost/reportserver 73 | ExampleReports 74 | Data Sources 75 | Datasets 76 | Report Parts 77 | 78 | 79 | 80 | DebugLocal 81 | Win32 82 | 83 | bin\DebugLocal 84 | SSRS2016 85 | http://localhost/reportserver 86 | ExampleReports 87 | Data Sources 88 | Datasets 89 | Report Parts 90 | 91 | 92 | 93 | Release 94 | Win32 95 | 96 | bin\Release 97 | SSRS2016 98 | http://localhost/reportserver 99 | ExampleReports 100 | Data Sources 101 | Datasets 102 | Report Parts 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /ServerReports/Servers.rsd: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | ReportServer 6 | SELECT tbl.* FROM (VALUES 7 | ( 'REPORTS') 8 | , ( 'REPORTS-TEST') 9 | ) tbl ([ServerName]) 10 | 11 | 12 | 13 | ServerName 14 | System.String 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /ServerReports/System Reports.rptproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | bin\Debug 6 | 2 7 | False 8 | False 9 | SSRS2016 10 | Win32 11 | ExampleReports 12 | Datasets 13 | Data Sources 14 | Report Parts 15 | http://localhost/reportserver 16 | 17 | 18 | DebugLocal 19 | bin\DebugLocal 20 | 2 21 | False 22 | False 23 | SSRS2016 24 | Win32 25 | ExampleReports 26 | Datasets 27 | Data Sources 28 | Report Parts 29 | http://localhost/reportserver 30 | 31 | 32 | Release 33 | bin\Release 34 | 2 35 | False 36 | False 37 | SSRS2016 38 | Win32 39 | ExampleReports 40 | Datasets 41 | Data Sources 42 | Report Parts 43 | http://localhost/reportserver 44 | 45 | 46 | $base64$PFNvdXJjZUNvbnRyb2xJbmZvIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmRkbDI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yIiB4bWxuczpkZGwyXzI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yLzIiIHhtbG5zOmRkbDEwMF8xMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDA4L2VuZ2luZS8xMDAvMTAwIiB4bWxuczpkZGwyMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAiIHhtbG5zOmRkbDIwMF8yMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAvMjAwIiB4bWxuczpkZGwzMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAiIHhtbG5zOmRkbDMwMF8zMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAvMzAwIiB4bWxuczpkZGw0MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAiIHhtbG5zOmRkbDQwMF80MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAvNDAwIiB4bWxuczpkZGw1MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAiIHhtbG5zOmRkbDUwMF81MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAvNTAwIiB4bWxuczpkd2Q9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRGF0YVdhcmVob3VzZS9EZXNpZ25lci8xLjAiPg0KICA8RW5hYmxlZD5mYWxzZTwvRW5hYmxlZD4NCiAgPFByb2plY3ROYW1lPjwvUHJvamVjdE5hbWU+DQogIDxBdXhQYXRoPjwvQXV4UGF0aD4NCiAgPExvY2FsUGF0aD48L0xvY2FsUGF0aD4NCiAgPFByb3ZpZGVyPjwvUHJvdmlkZXI+DQo8L1NvdXJjZUNvbnRyb2xJbmZvPg== 47 | @(DataSource) 48 | @(DataSet) 49 | @(Report) 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /SystemReports.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.8.34330.188 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Miscellaneous", "Miscellaneous\Miscellaneous.vbproj", "{881F7039-10CA-4670-8557-D727892688FB}" 7 | EndProject 8 | Project("{F14B399A-7131-4C87-9E4B-1186C45EF12D}") = "System Reports", "ServerReports\System Reports.rptproj", "{288214F0-4865-4BBD-A27C-43B34453445C}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | DebugLocal|Any CPU = DebugLocal|Any CPU 14 | Release|Any CPU = Release|Any CPU 15 | EndGlobalSection 16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 17 | {881F7039-10CA-4670-8557-D727892688FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 18 | {881F7039-10CA-4670-8557-D727892688FB}.Debug|Any CPU.Build.0 = Debug|Any CPU 19 | {881F7039-10CA-4670-8557-D727892688FB}.DebugLocal|Any CPU.ActiveCfg = Debug|Any CPU 20 | {881F7039-10CA-4670-8557-D727892688FB}.DebugLocal|Any CPU.Build.0 = Debug|Any CPU 21 | {881F7039-10CA-4670-8557-D727892688FB}.Release|Any CPU.ActiveCfg = Release|Any CPU 22 | {881F7039-10CA-4670-8557-D727892688FB}.Release|Any CPU.Build.0 = Release|Any CPU 23 | {288214F0-4865-4BBD-A27C-43B34453445C}.Debug|Any CPU.ActiveCfg = Debug 24 | {288214F0-4865-4BBD-A27C-43B34453445C}.Debug|Any CPU.Build.0 = Debug 25 | {288214F0-4865-4BBD-A27C-43B34453445C}.Debug|Any CPU.Deploy.0 = Debug 26 | {288214F0-4865-4BBD-A27C-43B34453445C}.DebugLocal|Any CPU.ActiveCfg = DebugLocal 27 | {288214F0-4865-4BBD-A27C-43B34453445C}.DebugLocal|Any CPU.Build.0 = DebugLocal 28 | {288214F0-4865-4BBD-A27C-43B34453445C}.DebugLocal|Any CPU.Deploy.0 = DebugLocal 29 | {288214F0-4865-4BBD-A27C-43B34453445C}.Release|Any CPU.ActiveCfg = Release 30 | {288214F0-4865-4BBD-A27C-43B34453445C}.Release|Any CPU.Build.0 = Release 31 | {288214F0-4865-4BBD-A27C-43B34453445C}.Release|Any CPU.Deploy.0 = Release 32 | EndGlobalSection 33 | GlobalSection(SolutionProperties) = preSolution 34 | HideSolutionNode = FALSE 35 | EndGlobalSection 36 | GlobalSection(ExtensibilityGlobals) = postSolution 37 | SolutionGuid = {3713881D-51A8-48E1-B404-2E3EDB24895E} 38 | EndGlobalSection 39 | EndGlobal 40 | --------------------------------------------------------------------------------