i Have 3 Dimension and 1 fact table , table definition with sample data as follows
/*
drop table FactStatusCount
drop table DimProductCategory
drop table DimProductSubCategory
drop table DimStatus
*/
CREATE TABLE dbo.DimProductCategory
(
ProductCategoryID INT PRIMARY KEY,
ProductCategory NVARCHAR(255)
)
CREATE TABLE dbo.DimProductSubCategory
(
ProductSubCategoryID INT PRIMARY KEY,
ProductSubCategory NVARCHAR(255)
)
CREATE TABLE dbo.DimStatus
(
StatusID SMALLINT PRIMARY KEY,
Status VARCHAR(50)
)
CREATE TABLE dbo.FactStatusCount
(
ProductCategoryID int references dbo.DimProductCategory(ProductCategoryID),
ProductSubCategoryID int references dbo.DimProductSubCategory (ProductSubCategoryID),
StatusID smallint references dbo.DimStatus(StatusID),
StatusCount int
)
-- Sample Data
INSERT INTO dbo.DimProductCategory SELECT 1,'Product 1'
INSERT INTO dbo.DimProductCategory SELECT 2,'Product 2'
INSERT INTO dbo.DimProductCategory SELECT 3,'Product 3'
INSERT INTO dbo.DimProductSubCategory SELECT 1,'Product sub 1'
INSERT INTO dbo.DimProductSubCategory SELECT 2,'Product sub 2'
INSERT INTO dbo.DimProductSubCategory SELECT 3,'Product sub 3'
INSERT INTO dbo.DimProductSubCategory SELECT 4,'Product sub 4'
INSERT INTO dbo.DimProductSubCategory SELECT 5,'Product sub 5'
INSERT INTO dbo.DimProductSubCategory SELECT 6,'Product sub 6'
INSERT INTO dbo.DimProductSubCategory SELECT 7,'Product sub 7'
INSERT INTO dbo.DimProductSubCategory SELECT 8,'Product sub 8'
insert into dbo.DimStatus values (1,'Pass'), (2,'Fail'),(3,'N/A')
insert into dbo.FactStatusCount(ProductCategoryID,ProductSubCategoryID,StatusID,StatusCount)
values (1,1,1,5 ),(1,1,2,5 ),(1,1,3,8 ),
(1,2,1,4),(1,2,2,4 ),
(1,3,2,4),(1,3,3,3 ),
(2,4,1,8 ),(2,4,2,7),
(2,5,1,6),(2,5,2,4 ),(2,5,3,8 ),
(2,6,2,3),(2,6,3,3 ),
(3,7,1,6),(3,7,2,4 ),(3,7,3,8 ),
(3,8,2,3),(3,8,3,3 )
-- I want to write the MDX Query to get the output as Like below T-SQL
select P.ProductCategory,St.Status ,Sum(StatusCount) StatusCount,
Convert( Decimal(9,2),Sum(StatusCount))/ (
select Sum(StatusCount) StatusCount
from dbo.FactStatusCount F1
WHERE F1.ProductCategoryID = F.ProductCategoryID
Group by F1.ProductCategoryID
) * 100 as ProductCount
from dbo.FactStatusCount F
inner join dbo.DimProductCategory p on p.ProductCategoryID = f.ProductCategoryID
inner join dbo.DimProductSubCategory S on S.ProductSubCategoryID = f.ProductSubCategoryID
inner join dbo.DimStatus St on St.StatusID = F.StatusID
Group by P.ProductCategory,F.ProductCategoryID,St.Status
Order by ProductCategory
Thanks in Advance - Sarika