├── .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 |
--------------------------------------------------------------------------------