I'm trying to get my cube working without getting "attribute key not found" errors, but the only way I've found to make it work, is to set up a referenced dimension from Dim_PropertyInfo to Dim_SalesInvoiceHeader (see scripts below) and leave the Materialize checkbox unchecked.
However, when I browse the cube, filter on INV001 and display the PropertyInfo attribute, it still returns all rows from Dim_PropertyInfo.
Can somebody tell me what I should be doing?
Script to create the test tables:
CREATE TABLE dbo.Dim_SalesInvoiceHeader
(
SalesInvHeaderID INTEGER NOT NULL,
SalesInvoiceNumber NVARCHAR(50) NOT NULL,
OtherStuff NVARCHAR(MAX) NULL,
CONSTRAINT PK_Dim_SalesInvoiceDetails
PRIMARY KEY (SalesInvHeaderID),
);
GO
CREATE TABLE dbo.Fact_SalesInvoices
(
FactID INTEGER NOT NULL,
SalesInvHeaderID INTEGER NOT NULL,
LineItem INTEGER NOT NULL,
CONSTRAINT PK_Fact_SalesInvoices
PRIMARY KEY (FactID),
CONSTRAINT FK_Fact_SalesInvoices_Dim_SalesInvoiceHeader
FOREIGN KEY (SalesInvHeaderID)
REFERENCES dbo.Dim_SalesInvoiceHeader (SalesInvHeaderID),
);
GO
CREATE TABLE dbo.Dim_PropertyInfo
(
PropertyInfoID INTEGER NOT NULL,
SalesInvHeaderID INTEGER NOT NULL,
SalesInvoiceNumber NVARCHAR(50) NOT NULL,
PropertyInfo NVARCHAR(MAX) NULL,
CONSTRAINT PK_Dim_PropertyInfo
PRIMARY KEY (PropertyInfoID)
CONSTRAINT FK_Dim_PropertyInfo_Dim_SalesInvoiceHeader
FOREIGN KEY (SalesInvHeaderID)
REFERENCES dbo.Dim_SalesInvoiceHeader (SalesInvHeaderID)
);
GO
... and the script to populate the tables:
INSERT INTO dbo.Dim_SalesInvoiceHeader
( SalesInvHeaderID
, SalesInvoiceNumber
, OtherStuff
)
VALUES (1, N'INV001', N'blah')
, (2, N'INV002', N'blahblah')
, (3, N'INV003', N'blahblahblah')
, (4, N'INV004', N'stuff');
INSERT INTO dbo.Fact_SalesInvoices
( FactID
, SalesInvHeaderID
, LineItem
)
VALUES (1, 1, 1)
, (2, 1, 2)
, (3, 1, 3)
, (4, 2, 1)
, (5, 2, 2)
, (6, 3, 1)
, (7, 3, 2)
, (8, 4, 1)
, (9, 4, 2);
INSERT INTO dbo.Dim_PropertyInfo
( PropertyInfoID
, SalesInvHeaderID
, SalesInvoiceNumber
, PropertyInfo
)
VALUES (1, 1, N'INV001', N'stuff')
, (2, 2, N'INV002', N'pool');