具有多个值和空值的参数的 MDX 查询
MDX Query with parameters with multiples values and null value
我使用 SSAS Cube 和 Datazen(仪表板创建器)。我有一个带有 3 个参数的数据视图(对于 valueCode 'AZE'):
AgeClassCode: 'AGE01', 'AGE02', 'AGE03', ...
StatutCode: 'A', 'B', 'C', 'D', ...
NiveauCode: 'X', 'Y', 'W', ...
对于此查询,当我使用多个值或每个值只使用一个值时,它会起作用。
但我希望在参数值为空时查询 returns 参数的所有值。我已经测试了 ISEMPTY(@param)、ISEMPTY(STRTOSET(@param)),...但是 returns 这个错误:
An mdx expression was expected. An empty expression was specified.
此查询适用于一个或多个值:
SELECT
NON EMPTY
{
[Measures].[Value], [Measures].[PreviousValueYear], [Measures].[PreviousValueReportMonth]
} ON COLUMNS,
NON EMPTY
{
NONEMPTY
(
[EntiteFederal].[ServiceCode].[ServiceCode].ALLMEMBERS *
[EntiteFederal].[EntiteCode].[EntiteCode].ALLMEMBERS *
[ReportMonth].[ReportMonth].[ReportMonth].ALLMEMBERS *
[T].[Year].[Year].ALLMEMBERS
)
} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM
(
SELECT ( { [ValueType].[ValueCode].&[AZE] } ) ON COLUMNS
FROM (
SELECT ( STRTOSET('{{ @AgeClassCode }}') ) ON COLUMNS
FROM (
SELECT ( STRTOSET('{{ @NiveauCode }}') ) ON COLUMNS
FROM
(
SELECT ( (STRTOSET('{{ @StatutCode }}') ) ON COLUMNS
FROM [MyCube]
)
)
)
)
WHERE
(
IIF( STRTOSET('{{ @StatutCode }}').Count = 1, STRTOSET('{{ @StatutCode }}'), [Statut].[StatutCode].currentmember ),
IIF( STRTOSET('{{ @NiveauCode }}').Count = 1, STRTOSET('{{ @NiveauCode }}'), [Niveau].[NiveauCode].currentmember ),
IIF( STRTOSET('{{ @AgeClassCode }}').Count = 1, STRTOSET('{{ @AgeClassCode }}'), [AgeClass].[AgeClassCode].currentmember ),
[ValueType].[ValueCode].&[AZE]
)
我需要更改什么?
编辑:
测试 strtoset()
,好的解决方案是
isError()
当使用 strToSet
或 strToMember
时,您需要提供一个代表有效 mdx
的字符串,例如这些都可以:
strToSet("[AgeClassCode].[AgeClassCode].members")
strToMember("[AgeClassCode].[AgeClassCode].[AGE01]")
这无效,因为 NULL
不是字符串,也不是表示 mdx 的东西:
strToSet(NULL)
因此,如果在您的客户端中您希望 NULL 代表所有成员,那么您需要以某种方式将 NULL 转换为字符串“[AgeClassCode].[AgeClassCode].members”,然后才能到达 strToSet
。
我使用 SSAS Cube 和 Datazen(仪表板创建器)。我有一个带有 3 个参数的数据视图(对于 valueCode 'AZE'):
AgeClassCode: 'AGE01', 'AGE02', 'AGE03', ...
StatutCode: 'A', 'B', 'C', 'D', ...
NiveauCode: 'X', 'Y', 'W', ...
对于此查询,当我使用多个值或每个值只使用一个值时,它会起作用。 但我希望在参数值为空时查询 returns 参数的所有值。我已经测试了 ISEMPTY(@param)、ISEMPTY(STRTOSET(@param)),...但是 returns 这个错误:
An mdx expression was expected. An empty expression was specified.
此查询适用于一个或多个值:
SELECT
NON EMPTY
{
[Measures].[Value], [Measures].[PreviousValueYear], [Measures].[PreviousValueReportMonth]
} ON COLUMNS,
NON EMPTY
{
NONEMPTY
(
[EntiteFederal].[ServiceCode].[ServiceCode].ALLMEMBERS *
[EntiteFederal].[EntiteCode].[EntiteCode].ALLMEMBERS *
[ReportMonth].[ReportMonth].[ReportMonth].ALLMEMBERS *
[T].[Year].[Year].ALLMEMBERS
)
} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM
(
SELECT ( { [ValueType].[ValueCode].&[AZE] } ) ON COLUMNS
FROM (
SELECT ( STRTOSET('{{ @AgeClassCode }}') ) ON COLUMNS
FROM (
SELECT ( STRTOSET('{{ @NiveauCode }}') ) ON COLUMNS
FROM
(
SELECT ( (STRTOSET('{{ @StatutCode }}') ) ON COLUMNS
FROM [MyCube]
)
)
)
)
WHERE
(
IIF( STRTOSET('{{ @StatutCode }}').Count = 1, STRTOSET('{{ @StatutCode }}'), [Statut].[StatutCode].currentmember ),
IIF( STRTOSET('{{ @NiveauCode }}').Count = 1, STRTOSET('{{ @NiveauCode }}'), [Niveau].[NiveauCode].currentmember ),
IIF( STRTOSET('{{ @AgeClassCode }}').Count = 1, STRTOSET('{{ @AgeClassCode }}'), [AgeClass].[AgeClassCode].currentmember ),
[ValueType].[ValueCode].&[AZE]
)
我需要更改什么?
编辑:
测试 strtoset()
,好的解决方案是
isError()
当使用 strToSet
或 strToMember
时,您需要提供一个代表有效 mdx
的字符串,例如这些都可以:
strToSet("[AgeClassCode].[AgeClassCode].members")
strToMember("[AgeClassCode].[AgeClassCode].[AGE01]")
这无效,因为 NULL
不是字符串,也不是表示 mdx 的东西:
strToSet(NULL)
因此,如果在您的客户端中您希望 NULL 代表所有成员,那么您需要以某种方式将 NULL 转换为字符串“[AgeClassCode].[AgeClassCode].members”,然后才能到达 strToSet
。