Multicoded values in SQL Server Analysis Service - ssas

I have a fact table where the some columns are having multicoded values. It means for some responses, I have multiple values so I added multiple rows for that, adding null values for the remaining columns.
When I retrieve the data through a MDX, it gives the result correctly, but there is a scneario (red one) where I need to retrieve the data based on a sample (condition) based on that filled null value column. So the answer is coming incorrectly for that.
Is there any way I can fix this through a structure change or with a mdx approach?

Related

Column with multiple data types in Power BI Matrix Table

My issue is similar to this one Multiple data types in a Power BI matrix but I've got a bit of a different setup that's throwing everything off.
What I'm trying to do is create a matrix table with several metrics that are categorized as Current (raw data values) and Prior (year over year percent growth/decline). I've created some dummy data in Excel to get the format the way I want it in PowerBI (see below):
Desired Format
As you can see the Current values are coming in as integers and the Prior % numbers as percentages which is exactly what I want; however, I was able to accomplish this through a custom column with the following formula:
Revenue2 = IF(Scorecard2[Current_Prior] = "Current", FORMAT(FIXED(Scorecard2[Revenue],0), "$#,###"), FORMAT(Scorecard2[Revenue], "Percent"))
The problem is that the data comes from a SQL query and you can't use the FORMAT() function in DirectQuery. Is there a way I can have two different datatypes in the same column of data? See below for how the SQL data comes into PowerBI (I can change this if need be):
SQL
Create 2 separate measures, one for the Current second for Prior, and format these measures.
Probably you can also use a case in SQL query to format your data to bring it as STRING.
What I wound up doing was reformatting the SQL code to look like this:
Solution
That way Current/Prior are have two separate values and the "metric" is categorical.
I got the idea from this post:
Simple way to transpose columns and rows in SQL?

Compare Two Rows and Update Start and End Dates

I need some help and I know I am not the only one to deal with this issue but I am wondering if you might have some ideas on how to handle the situation of comparing two rows of data filling out start and end dates.
To give you some context, we have a huge hierarchy (approx 8,000 rows and about 12 columns wide) that is updated each year. Sometimes the values change and sometimes they don’t. When the values don’t change, then I don’t need to adjust the dates. When the values do change and a new row is added, I need to change the data.
I have attached some fake data to try and illustrate my data. I am building this in MS Access, so I think this is more of a DBA type question that is going to be manipulated via a recordset type method.
In my example I have two tables – Old Table and New Table. In each table there is a routing code field that represents my join field and primary key for this table.
The Old table represents existing data - tblMain. The New Table represents the data to be appended - tblTemp.
To append the data, I have an append query set up in Access. I perform a left join between the Old and New tables, joining on every field and append the rows that are null in the Old table. That’s fine and that is not where my issue is.
What is causing me issue is how to fill out the start and end dates.
So as you can see from my tables, we are running a zoo. Let’s just say for the sake of the argument, our zoo started off pretty simple and has become more sophisticated. We now want our hierarchy to expand out and become a bit more detailed as we are now capturing the type of animal (Level 4) and the native location (Level 5).
As you can see when comparing one table to another the routing codes are the same, so the append query has to have a join on each field. When you do this, you return the Result Table which is essentially the Old and New tables stacked on top of each other. You might think about a Union query but this is going to give me duplicates and I don’t want that.
If you notice in the Result Table there is a Start and End Date. Let’s just say I get the start and end dates via message box that pops up upon the import of the data and is held in a variable. I think there are dates in my real data but still trying to verify this.
So how do I compare (pseudo code for the logic needed)?
• For each routing code:
Compare Levels 1-5
If the routing code is the same but Levels 1 -5 are not the same
fill out the end date of the old record
fill out the start date of the new record
This idea of comparing two records and filling out a data is quite prevalent in my organization but I haven’t found a way of creating the logic that consistently works so any help or suggestions would be appreciated.
Old Table
New Table
Result Table

Column name or number of supplied values does not match table definition, total noob

I understand this is probably a really REALLY silly problem, but I've only just started using SQL since Monday. Originally I was using an access database and converted it to SQLExpress and now I'm getting that error. Included are some screenshots that will hopefully show you how I've messed up.
The Query
The Database in SQL Studio
When you are doing an insert in Sql you need to either provide a list of the columns you are inserting into or provide values for all columns in the table.
Since your insert is providing one value and your table has two columns you would need to provide a list containing the column for which you are providing values.
insert into Data$ (CompItemNo)
Select CompItemNo
From Kits$
where ItemNo = :ItemNo;

How to Combine Multiple Tableau Columns

Let's say I have two columns in the data called
Functionality_First_Question and Functionality_Second_Question
Both columns have similar values
"approve", "functionality unclear", "functionality broken", NULL, etc.
Each row corresponds with a single, distinct review ID.
I thought about using Tableau combined fields to aggregate the data but will it end up turning into "functionality unclear, functionality broken".
I instead want just a distinct count of how many review IDs are associated with each answer to each question.
Let me know if this is unclear!
Depending on your data source, you can pivot the data in the data source tab:
highlight your First_Question, Second_Question, Nth_Question columns
right click
Pivot data
Now you have several records for each item (one record for each question) and you will be able to group all items by answer.
If this is not possible with your data source, one crude workaround would be:
Create a parameter Answer_param with the different possible answers
Create a calculated field that has a formula like
CONTAINS([First_Question], Answer_param) OR CONTAINS([Second_Question], Answer_param) OR ..
This will create a field that is True, if one of the answers contains the selected answer from your parameter.

Trying to count records in SSRS from different data sets

I have an SSRS report that combines 5 reports into one. Each report is populated from a different stored procedure. The first page is a summary that is to provide a record count from each report. I've created fields in the stored procedure that provides the counts for each individual report: phycount and nonphyscount. I'm trying to create a table similar to this:
Active comes from one data set, Initial comes from another, Recert comes from another, etc.
I've been playing around with the Lookup and LookupSet but I'm just getting errors, plus I'm not sure if that's even the right direction.
Does anyone know how to do this?
Lookup and Lookupset are more for getting specific values out of a dataset. Very useful but not necessary for what you're trying to accomplish.
You can use aggregate functions SUM and COUNT to accomplish what you want to do. The cool thing about these functions is you can actually embed IIF statements inside of them.
I'm not sure exactly how your datasets look and are named but it would be something like this...
SUM(IIF(Fields!Type.Value = "PhyCount", 1, 0), "Active")
The sum function goes through every row of your dataset and sums the values you pass to it. The iif statement checks to see if the type field in the dataset is "PhyCount". If so, it returns 1, if not, 0. Since this will happen for every row, your SUM function will return a count of each row with status active.
edit: "Active" after the iif statement specifies the name of the dataset.
EDIT AGAIN: This solution apparently does not work in SSRS 2008.