We are testing an application originaly written for AS 2000 with AS
2005.
This application uses DSO from VB to create and process cubes. I have
gotten
over the major hurdles of getting DSO to work with AS 2005. However,
upon
creating of the cubes, I get errors processing it (even from
Management
Studio). Here's the code (abridged to remove error handling) that
we use to
create a cube:
Dim dsoCube As DSO.MDStore
Set
dsoCube = m_dsoDatabase.MDStores.AddNew(cubeName)
' set the cube's
description
dsoCube.Description = sCubeDesc
' set the cube's
datasource
dsoCube.DataSources.Add
m_dsoDatabase.DataSources(mvarDBName)
Dim dboStr As String
dboStr = sLQuote & "dbo" & sRQuote & "."
' set the source
table (fact table) for the cube
dsoCube.SourceTable = dboStr &
sLQuote & FACT_TABLE & sRQuote
dsoCube.EstimatedRows =
164558
' specify access permissions to the cube by adding roles to the
cube
Dim dsoCubeRole As DSO.role
Set dsoCubeRole =
dsoCube.Roles.AddNew("BSA Role")
dsoCubeRole.SetPermissions "Access",
"RW"
' create cube's measures
'
Dim dsoMeasure As
DSO.Measure
Set dsoCube = m_dsoDatabase.MDStores.Item(cubeName)
Set dsoMeasure = dsoCube.Measures.AddNew("BaseAmt")
' set the
measure's source column, data type and the formatting
dsoMeasure.SourceColumn = dsoCube.SourceTable & "." &
_
sLQuote & "baseamt" & sRQuote
dsoMeasure.SourceColumnType = adDouble
dsoMeasure.FormatString =
"Currency"
' this measure will be aggregated by summation
dsoMeasure.AggregateFunction = aggSum
Set dsoMeasure =
dsoCube.Measures.AddNew("Count")
' set the measure's source column,
data type and the formatting
dsoMeasure.SourceColumn =
dsoCube.SourceTable & "." & _
sLQuote
& "baseamt" & sRQuote
dsoMeasure.SourceColumnType =
adInteger
' this measure will be aggregated by summation
dsoMeasure.AggregateFunction = aggCount
Set dsoMeasure =
dsoCube.Measures.AddNew("TranNo")
' set the measure's source column,
data type and the formatting
dsoMeasure.SourceColumn =
dsoCube.SourceTable & "." & _
sLQuote
& "TranNo" & sRQuote
dsoMeasure.SourceColumnType =
adInteger
' this measure will be aggregated by summation
dsoMeasure.AggregateFunction = aggMax
' Create Calculated
members
Dim dsoCalculatedMember As DSO.Command
Set
dsoCalculatedMember = dsoCube.Commands.AddNew("CustAvgAmt")
' set the
command type
dsoCalculatedMember.CommandType = cmdCreateMember
'
set the MDX statement that defines the calculated member
dsoCalculatedMember.Statement = _
"Create Member Measures.[CustAvgAmt] As
" & _
"'avg({LastPeriods(3 ,
[bookdate].&[2003].&[4].&[10])},
measures.[baseamt])'"
Set dsoCalculatedMember = dsoCube.Commands.AddNew("CustAvgCnt")
' set the
command type
dsoCalculatedMember.CommandType = cmdCreateMember
' set the MDX statement that defines the calculated member
dsoCalculatedMember.Statement = _
"Create Member Measures.[CustAvgCnt] As
" & _
"'avg({LastPeriods(3 ,
[bookdate].&[2003].&[4].&[10])},
measures.[Count])'"
'
add the BookDate dimension
Dim dsoBookDateDim As DSO.Dimension
Set
dsoBookDateDim = dsoCube.Dimensions.AddNew("BookDate")
' add the
RecvPay dimension
Dim dsoRecvPayDim As DSO.Dimension
Set
dsoRecvPayDim = dsoCube.Dimensions.AddNew("RecvPay")
' get the list
of all tables used in this cube
' this list includes the fact table and
the dimension tables
' Note: Make sure that you do not repeat the same
table name twice.
dsoCube.FromClause = dsoCube.SourceTable & ", "
&
dsoBookDateDim.FromClause
dsoCube.joinClause =
dsoCube.joinClause & _
"(" & _
dboStr
& sLQuote & FACT_TABLE & sRQuote & "." & sLQuote
&
"bookdate" & sRQuote & _
" = " &
_
dboStr & sLQuote & "TblBookDate" & sRQuote &
"." & sLQuote &
"bookdate" & sRQuote & _
")"
dsoCube.SourceTableFilter = mvarFactTableFilter
' save the
cube definition in the metadata repository
dsoCube.Update
This
code runs fine, but during processing of the selected cube from
Management
Studio, the following error is displayed:
The Measures cube either does
not exist or has not been processed
There is no Measures cube, nor was
there ever. This does not happen when
processing cubes in AS 2000 or even in
AS 2005 if the cube was migrated from
AS 2000.
Can anybody help with
this?
Thanks in advance,
Boris Zakharin, MCAD
Metavante Risk and
Compliance
Hi Boris,
the problem is in the following line, which creates a calculated member. In AS2005 (as well as in AS2000) the member created in the cube scope should be prefixed with the cube name or CurrentCube, since Measures is the first name detected AS2005 treats it as a cube name. Pehaps AS2000 did not detected this error during the prosessing, but the calc member was disabled pr may be I'm wrong and CurrentCube was optional, but anyway, if you add CurrentCube to all calculated members it should start to process.
"Create Member Measures.[CustAvgAmt] As " & _
"'avg({LastPeriods(3 , [bookdate].&[2003].&[4].&[10])},
measures.[baseamt])'"
|||Thanks a lot, that worked