Raid Consumables

What should you have on hand before the raid forms, and you zone into Antrous.

375 Food

There are different levels of food, you should seek to bring 375 Food, if you are in a guild there should be many people that have cooking to the level to craft it if you can provide materials or gold for their trouble.

The class guides I linked to before above should contain the recommended Food to use.

Often Guilds will have Lavish Feasts for raid members but do not count on these.  Having the right food is a minimal cost and does improve performance, and shows your serious about raiding.


These are a very important part of raiding as they provide a very large buff that does not expire on death, which makes them very efficient for their cost, as even if something goes wrong you have the flask for its full duration, it is a very cost effective DPS increase.

Depending on your speculation you will use different consumables, look at your primary state and pick the associated Flask.

  • Flask of Ten Thousand Scars – Stam
  • Flask of the Whispered Pact – Int
  • Flask of Countless Armies – Str
  • Flask of the Seventh Demon – Agi

This should come from the information we looked at in getting your Class Specialization and Mechanics down.

Antorus for many groups is at least a 2 hour clear, with a good baseline for an introductory group carrying some new players to be between 2-3 hours. So you should have at least 3 flasks, I would recommend keeping 5 flasks on your character.

If your Raid provides a spirit cauldron great, but you shouldn’t expect it.

Potion of Prolonged Power

This is the standard DPS Potion, you should look to have a full stack (200) of these for Antrous the minimum is 21 (if there are no wipes, and I am not counting Enoar), if you use them on every fight.

You should plan to use 2 on each fight (with Argus being 3), one as a pre-pot and 1 during the fight.

Seals of Broken Fate

You can purchase up to 3 per week from the vendor in Dalaran and acquire them through various other means, up to a cap overall of 6.

If you have some advanced time to plan across several resets you should ensure you have 6 for the week, and if possible and your raid is likely to take a break 3 more to purchase for the week so that you can ‘coin’ 9 total bosses in the raid.

Don’t count on being able to leave and buy more seals, but if your raid leader is open to it, it is a good way to get more shots at gear.

Defiled Augment Rune / Lightforged Augment Rune

If you have been doing Order Hall Missions, World Quests and general content you likely have a couple of stacks Defiled Augment Runes of these, ensure that you have some to go into Antorus as they are a strong stat buff.

If you plan to start to raid a lot and have gotten the Exalted with the Army of the Light you can purchase an item that provides the same buff for 40,000.  A good idea is to macro it to your potion or other buff spells as it has unlimited uses.

Tome of the Tranquil Mind

This is optional but very useful, many classes need to change their talent builds for each boss, this is a good way to eek out a bit more performance and put in a good showing for your first raid even if the talent adjustments are minor.

During the Raid

There has been a lot of work to just get to this point, but this is the pay off from all of the above activities the actual raid time.

I will assume this is a semi-organized raid with voice coms and one in which the design is to introduce new players to the raid in a guild.  If you are in a Pick-up Group, well godspeed if it’s your first time.

Plan to show up 10-15 minutes and know how to get to the raid instance itself.  The Antorus raid specifically is only a few minutes walk from the Vindicaar, I would recommend setting your hearthstone to the Vindicaar.

Once you get to the instances get ready to start clearing trash, you can buff for trash, but in general its acceptable to wait until just before the pull on the First Boss to buff up.

Most often there will be a Ready Check at which point you should use your Flask, Food and Augment Rune if none were provided.

Join Voice Communications, typically Discord.

The Raid Leader, this most often the person doing the inviting assigning roles and tasks to individuals the raid, they might assign specific tasks to others in the raid if so listen to whom each task is assigned to; the typical things that need to happen in a good raid, and what they are for.

There are a couple of specific things you might be asked to do depending on your class, so a couple of specific notes are below as well.

Even if you have no plans to talk, it is important to hear callouts and the other players, and it is nice to hear some voices and be reminded they are actual humans you are playing with.

The people to listen to in your raid, again I am assuming this is a semi-organized raid in a guild that is a functional raid guild.

Ready Checks

This is to ensure that everyone is ready to do whatever is next, sometimes it is just to ensure everyone is at the boss at their keyboards and understands the fight.

If you have questions or need to clarify something the Ready check is the time to do it, clicking Yes means your ready to engage with the boss and everything that comes with it.

Pull Timers

These are traditionally handled by the tanks and are a countdown from 12, 10, or some other number to 1 which is when the pull happens.

This is to time your Opener which should be in the class guides I have mentioned above, this is an extremely important part of your DPS and is an important area to improve.

Of specific important on the pull is “Pre-Potting” which is using a potion before combat starts, typically on 2 of the countdown; if you are unsure of your rotation err on the side of delaying a bit to not pull early as an early pull can mess up multiple DPS’ers rotations and makes everyone angry…and also is super obvious.

So, you can just delay a bit and do the opener a bit later, just pot before the boss is pulled.

Blood Lust / Heroism / Timewarp, etc

In many groups, the specific time will be known and someone in the raid group will just do this automatically, when your DPS’ing it can be important to know when its going to happen to improve your DPS, but it is also something you can worry about in future runs. If you are a Bloodlust class read below for some more details.

Healer Cooldowns

I recommend being a DPS for your first run, but if you ignored me, make sure you pay attention who is supposed to call out cooldowns, if they don’t seem like they are going to ask the Raid Leader if someone is going to call them or if you should use them at your own discretion, if so use them fairly aggressively at most have fairly short cooldowns and make up a big part of your healing.

Ability Calls

Some fights are helpful if someone is calling out abilities, in general, this shouldn’t be something you need because DBM will let you know what is important, but it can be helpful if someone is doing it correctly.

There can be a challenge if multiple people are trying to be helpful and calls stuff out but getting it wrong, try to learn who is reliable and who is not when in doubt trust the Boss Mod.

Specific Class notes:

Bloodlust – Shaman, Mages, and Hunter

If you have Bloodlust/Heroism know when it is supposed to be used in the fight if there are multiple people with Bloodlust find who specifically should be doing it.

If there are mages and they have the Shard of the Exodar they will hold back their Timewarp for increased DPS, so if you are a Shaman or Hunter it is likely going to be your job to Bloodlust.

Battle Rez – Death Knight, Druid, Warlock and Hunter

You have a Battle Rez, it is on a shared timer so find out who is calling for them and only cast it when called for.  Some fights have specific reasons to hold on to them, most commonly for Tanks / Healers so find out.

If you don’t get an answer in general battle rez the tank if they die, and hold on to it otherwise unless you are the only battle rez in the group, hopefully, this is not the case.

Shaman’s Reincarnation does not count as a battle rez nor does the Holy Priest Legendary cloak or the various ‘Cheat Death’ abilities.

Warlock Soulstones only count when they are used, if you are a warlock do not Soul Stone yourself and do not use it during the fight.

Warrior Misc.

Make sure you have Commanding Shout bound somewhere if the Raid Leader calls for it, it is a strong survivability cooldown in the raid.


Ritual of Summoning, and Healthstones.

These are very useful tools for the raid so make sure that before each boss pull you’re dropping your Healthstones for raiders to collect them, and that if someone joins the raid or otherwise needs to leave and come back that you put up a Ritual of Summoning without being asked a bunch of times.


Conjure those Mana Buns, the healers will thank you.

Analyze Performance

Okay, the raid is over and ideally some bosses are dead, and hopefully, you had fun and maybe even made a few friends along the way.

First, take a bit of a break, raiding can require a lot of focus and it is good to celebrate that you raided, after that there is still a number of things we can do to continue to improve.

The first thing to do is check if anyone you were with already logged the raid if you are in a guild one of the regulars or officers very likely did this so you can just review their log, if not then we can use the add-on we configured to upload the logs. (note to self, write a post on uploading logs).

Warcraft Logs is our first stop, it tracks everything that happened in a fight, for the purpose of quick improvement the best thing to do is look at each fight one at a time and click on the Problems tab and look for your name.  These are the most obvious things you can improve and in most cases, it will even tell you how.


Another important tool on the Warcraft Logs site, is the Compare tab as this lets you compare yourself to other players in a similar situation and see how well they did, and gain information like what talents they chose, items (trinkets and legendaries) they used, and what happened to them.

This is a really powerful tool for tuning your performance once you have done the encounter a few times.

Wowanalyzer is the next stop on our personal improvement journey, using the link from the Warcraft Logs fight from above the site will analyze your performance and identify areas in your rotation for cooldown management and things you can work on and improve.

It is important that this is an ideal state and it does not take into account specific boss mechanics and intermissions for the recommendations so you will need to apply some knowledge of the fight, but in general, they are important keys to work towards and can give you good areas to improve.  Pick one, and focus on it, don’t try to improve all of it at the same time.

Wipefest is an optional stop on our journey.  If you want to know what went wrong with a specific pull, or some of the bigger details of what happened or critical events and if they were handled correctly; this is your site.

This site breaks down a timeline of what happened in each encounter and identifies areas in which major mechanics went wrong; it is important to be aware just because someone died to something that it might not be their fault; so knowledge of the mechanics is important on figuring out what happened but this is a good place to start looking.

Creating an SQL Azure Database for Metadata

Some of the steps in this post will require ADALSQL.DLL this can be found in SQL Management Studio 2016, or Data Tools for Visual 2015; and .NET framework 4.6 or later.

Setup the Database Server and Metadata Database

On your Azure Portal ( you’ll need to create a new Database, and if you do not yet have a Server a new Sever as well.  This can all be completed from the SQL Database Blade.

New - > Data + Storage -> SQL Database

For several steps you’ll need to sure ensure that it is a V12 Server, and you will want to allow azure services to access the server.

Add Client IP Address to Firewall

You will need to at least add your client IP Address, as well as any other well known IP Address ranges into the Firewall Settings.

Add Client IP to SQL Firewall

Configure Azure Active Directory Authentication

For a database that is designed to be shared across many users, the best solution will be to integrate this with your Azure Active Directory, using Azure Active Directory Groups. I will assume you already have an Azure Active Directory Instance setup and running.

Setup the Required Security Groups

Using Security groups is the preferred method for controlling access, this is especially true in Enterprise Scenarios; with Azure Active Directory Premium we can use Dynamic groups for this as well which can keep maintenance very low once the business rules are agreed on.

Create SQL Administrator Group

First, you will want to create an Azure Active Directory Security Group to hold the SQL Server Admins for the server; I am going to name it “a-ca-sql-admins”.

Add the users who will require administrator rights to the SQL Servers to this group, most likely your admin account.

Create an SQL Users Group for the Database

Secondly, you will need a group for the users of the metadata.  This will hold all of the users who are approved to access this database. I will name it “a-ca-sql-metadata-users”.

Creating user groups that have functions for each database will make it easier to maintain in the future, if someone outside the sql admin team was going maintain the dimensions on this database you could also create “a-ca-sql-metadata-readers” and “a-ca-sql-metadata-writers”.

Assign the Azure Active Directory Administrator

Open the SQL Server Blade from the new Azure Portal and on the settings menu you will find an option to assign the Active Directory admin.  In our case this will be a security group.  Note that MSN and other non-integrated domains cannot be the assigned admin.

Add Azure SQL Admin.PNG

Create the user in the metadata Database

Open a connection to the Server using one of the accounts in the Azure Active Directory Administrator group defined above.  In this case, because I am not using Federation I am using Active Directory Password Authentication.

SSMS - Connect to Azure Active Directory

When connected Open a New Query run the following command.

CREATE USER [a-ca-sql-metadata-users] FROM EXTERNAL PROVIDER
EXEC sp_addrolemember 'db_datareader', [a-ca-sql-metadata-users]

This will create the new user into the metadata database and then assign the db_datareader role, in this case, due to the nature of the information we want everyone to be able to read everything.

You would not do this for a database with internal data and instead, would create a unique role set for the tables required.


The steps above are a straightforward way to create a central database that can use various utility tables to use across various reporting platforms, this will reduce the duplication of functions and allow for improvements in data models to be quickly shared.

Additional Information and Resources

If you’re looking for in the in-depth steps you can find them here:

Additionally, there is a helpful video on Channel9

Building a Date Table for Power BI

A very common requirement in data analysis is working with Dates, a key tool for handling this is a Date table as this centralizes the concept of dates for your organization and allows for some complex filtering and display within your reports.

There are a couple of steps for building a date table and once completed we will have a highly dynamic range of dates for PowerBI.


  • Identify the Date Ranges
    • Pick a Fixed Starting Date
    • Build a Dynamic End Date
  • Creating the Date Table
    • Add a New Table
    • Add the First Column
    • Basic Date Columns
    • Date Labels
    • Current Date Options

Identify The Date Ranges

Before we start up PowerBI we need to work out the range of dates that make sense for our report, ideally, we want to create a range that is as large as we need to capture every date, but still as small as possible to keep performance high.

Adding all the dates for a hundred years sounds good at first but the performance quickly goes down hill as we add calculated columns on the table.

Pick a Fixed Starting Date

There are two main parts to figure out, the first is the date of the year that you want to start your date table on.  Most commonly this is the start of the Fiscal Year for your organization; if you’re not sure what this is check with the Accounting Department they should be able to tell you, most often this will be Jan 1.

The second part is to figure out what year to start the date table on, this will very a lot with what the report is trying to accomplish, and normally will be back at least 1 year if not a few more.

For this demonstration, I’ll be using 1 Jan 2012.


Using the DATE formula is the best way to go as this will avoid a number of issues that can occur with local date formats that can come up from using a date string instead and changing computers.

Building a Dynamic End Date

We can create a Dynamic End Date that will grow as we advance in time, this is because we can pass a function to the End Date Parameter of the CALANDER function.

In nearly all cases just adding to the end of the next year will be enough for most reporting needs, if there are cases where you need more then the current and next year you can easily just add a +2 (or more) instead of a +1.

In most cases, you will want to use the Day before the Start of the Fiscal Year or the Fiscal Year End, again your Accounting Department can help you with this if you are not sure, in most cases, this will be December 31.

In this case, I will use December 31 as the year end


If your Fiscal Year end is February you can run into some challenges with leap years and hard-coding of dates; we can use the EOMONTH function to handle this.


Create the Date Table

Now that we have established the parameters of the how long the date table will be created for we can start PowerBI and add it to our model.

Add a New Table

Open a New Power BI Model, and switch to the model editor and select New Table

New Table

In the Formula, Bar adds in the details for the dates we identified above.

Date = CALENDAR(DATE(2012,1,1),DATE(YEAR(TODAY())+1,12,31))

The CALENDAR function is specifically designed to create a table like this and takes the Start and End date we outlined above.  Adding the Dynamic Values will allow it to expand dynamically.

Create Table

This will populate the Date table which we will use for all the rest of the future calculations and because of the Dynamic End Date. You should also switch the Data Type to Date instead of the default Date/Time, and the Format to one you like (I prefer yyyy-MM-DD).

Now we can build up a range of helpful date formulas, many of them are based on simple formatting and make reporting dates a snap.

Adding a new Column

New Column

The Syntax for a formula in DAX is “Column Name = Expression to Evaluate” this makes adding columns in PowerBI quick and painless.  The part after the = sign will work if you are using Excel to build the Date table as well and you’ll need to rename each column.

Basic Date Functions

These are the basic functions for formatting dates, and ordering information.

Year = FORMAT([Date],"YYYY")
Month = FORMAT([Date],"MM")
Day = FORMAT([Date],"DD")
DayOrder = FORMAT([Date],"W - DDD")
Weekday = FORMAT([Date],"W")
Week = FORMAT([Date],"WW")
Quarter = FORMAT([Date],"Q")
YearMonth = FORMAT([Date],"YYYY-MM")
MonthSort = FORMAT([Date],"mm-MMM")
DateKey = FORMAT([Date],"yyyymmdd")

Date Name Functions

It is helpful for a number of report labels to have access to the long and short versions of the various date aspects.

WeekdayNameShort = FORMAT([Date],"DDD")
WeekdayNameFull = FORMAT([Date],"DDDD")
QuarterName = "Q" & FORMAT([Date],"Q")
MonthNameShort = FORMAT([Date],"MMM")
MonthNameFull = FORMAT([Date],"MMMM")

Current Date Functions

These are very helpful for a wide range of functions of current reporting and other dynamic scenarios. These are returned as boolean (true/false) values, so once you create them you’ll want to change the data type to true/false.

IsCurrentDay = IF([Date]=DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(TODAY())),1,0)
IsCurrentWeek = IF(FORMAT([Date],"YYYY-WW")=FORMAT(TODAY(),"YYYY-WW"),1,0)
IsCurrentMonth = IF(DATE(YEAR([Date]),MONTH([Date]),1)=DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(1)),1,0)
IsCurrentYear = IF(YEAR([Date])=YEAR(TODAY()),1,0)

There are a number of areas to extend and add more functions if they are required for your reports such as IsYesterday, IsTomorrow, IsLastWeek, IsNextWeek.


The steps above will create a simple but powerful date table that will last the test of time and not need to be updated in the future, which is very important once a model gets out in the wild or handed off to someone else.

There is a lot more we can do with the date table which I’ll cover in future posts, such as adding Hierarchies for reporting, adding more custom functions.

I hope this helps your reporting efforts, let me know if there is anything I missed in the comments!

Cloud Network Diagrams

As more and more objects move into the cloud the ability to build clear network diagrams becomes more important, today I found the Visio stencils and general use PNG for the cloud objects to build Azure (and other cloud) network diagrams.

Microsoft Azure, Cloud and Enterprise Symbol / Icon Set – Visio stencil, PowerPoint, PNG:

To use them in Visio you will want to open the Zip that you download and then copy the Visio Folder into the My Shapes Directory on your PC, they will then show up under the My Shapes Folder in Visio.

Detailed Instructions are here:

To use the images in PowerPoint you can place them anywhere on you need them and then drag and drop the images into your presentation.



Storing Credentials for PowerShell

When working locally on PowerShell scripts I am quite frequently re-running them; and rather then let my self hard-code my credentials into my script which would be the easy (and less secure) thing to do, I did some digging to figure out now to securely store them.

$credpath = "v:\crypt\token.xml"
Get-Credential |  Export-CliXml $credpath

This will prompt for an interactive dialog box where you enter your password, and it is then written as a secure string to an xml file to the path identified.

Now this can easily be used in a number of scripts on the local machine without the need to enter credentials interactively which is helpful for repeated runs and automation scenarios as well where there might not always be an interactive UI.

$credpath = "v:\crypt\token.xml"
$cred = import-clixml -path $credpath

This file can only be used by the user and the machine where it was created; you should keep the file somewhere secure like an encrypted USB Drive or VeraCrypt partition.

If you happen to use two user accounts or two machines you can test this by running this script that will display your password on the user account and machine where the credential was created, and fail on an account or machine where it was not.  Note don’t do this in front of an audience.

$credpath = "v:\crypt\token.xml"

$cred = import-clixml -path $credpath
write-host $cred.GetNetworkCredential().password

I have found this a very helpful way to cut down my runtime when building out powershell scripts as well as prevent accidently committing or sharing my credentials with a co-worker.


Getting started in the Cloud

IT has gone under a wide range of technology shifts over the past several years, as storage prices have continued to drop, vitalization hanging the nature of server rooms, broadband and mobility providing internet connections all the time.

These technologies have come together and are the foundation of what we call the cloud, massive storage, compute and practically infinite global scale. In many ways it is similar to the mainframe computers that dominated the 70s and 80s before the desktop computer revolution.

Mastering new technologies has always been a critical part of a successful IT career, but the pace of change technology has never been faster, Microsoft has set up a cloud essentials subscription for IT Pro’s to have access to try these new technologies.

This is a good hub to get familiar with the various parts of the Azure Stack and how to work with it in a familiar application language.

Microsoft is also previewing a new platform to distribute additional documentation to developers in an easier to browse fashion.  It is currently previewing content for the Enterprise Mobility Suite that is part of the Office 365 offering.