Forum Discussion
Assign VALUES to VAR from SWITCH statement
- 7 years ago
Anonymous
You're right. It seems IF returns a scalar too. I would then try one of the following. In any case, I'd also be interested in seeing other approaches. Does anyone have other ideas? It might be a good idea to open up another thread asking for them.
Intended_Measure := VAR Test1 = VALUES ( TABLE[Column1] ) VAR Test2 = VALUES ( TABLE[Column2] ) RETURN IF ( [SelectMeasure] = 1, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN Test1 ) ), IF ( [SelectMeasure] = 2, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN Test2 ) ) ) )or without the VARs:
Intended_Measure := IF ( [SelectMeasure] = 1, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN VALUES ( TABLE[Column1] ) ) ), IF ( [SelectMeasure] = 2, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN VALUES ( TABLE[Column2] ) ) ) ) )
Hi Anonymous
SWITCH( ) returns a scalar. You are attempting to return a table. Try with nested IFs:
Intended_Measure :=
VAR Test =
IF (
[SelectMeasure] = 1,
VALUES ( TABLE[Column1] ),
IF ( [SelectMeasure] = 2, VALUES ( TABLE[Column2] ) )
)
RETURN
( ..... )Hello AlB,
I changed the SWITCH to a nested IF but I run into the same problem.
I'm using the TEST variable as a condition in the return clause:
Intended_Measure :=
VAR Test =
IF (
[SelectMeasure] = 1,
VALUES ( TABLE[Column1] ),
IF ( [SelectMeasure] = 2, VALUES ( TABLE[Column2] ) )
)
RETURN
( CALCULATE(SUM([Measure]), FILTER(OTHERTABLE, OTHERTABLE[Columnx] in TEST)) )
I receive the error:
The function expects a table expression for argument '', but a string or numeric expression was used.
If I use VALUES(TABLE[Column1]) in the filter clause it works correctly.
- AlB7 years agoCommunity Champion
Anonymous
You're right. It seems IF returns a scalar too. I would then try one of the following. In any case, I'd also be interested in seeing other approaches. Does anyone have other ideas? It might be a good idea to open up another thread asking for them.
Intended_Measure := VAR Test1 = VALUES ( TABLE[Column1] ) VAR Test2 = VALUES ( TABLE[Column2] ) RETURN IF ( [SelectMeasure] = 1, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN Test1 ) ), IF ( [SelectMeasure] = 2, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN Test2 ) ) ) )or without the VARs:
Intended_Measure := IF ( [SelectMeasure] = 1, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN VALUES ( TABLE[Column1] ) ) ), IF ( [SelectMeasure] = 2, CALCULATE (SUM ( [Measure] ), FILTER ( OTHERTABLE, OTHERTABLE[Columnx] IN VALUES ( TABLE[Column2] ) ) ) ) )- Anonymous7 years agoNot applicable
My plan B is using your second approach with a SWITCH.
The issue is that I have 3 filters to apply. I believe it is way cleaner to keep a single measure with the VALUES in 3 variables rather than nesting measures one upon each other.
Thanks in any case.- AlB7 years agoCommunity Champion
Anonymous
I'm not sure I understand what you mean. Keep in mind though that measures too can only hold scalars, not tables.