Вам необходимо внести следующее изменение. Вместо
WHEN [CONTAINER INSTANCE DIMENSION].[Container Size] = '20'
вам нужно написать
WHEN [CONTAINER INSTANCE DIMENSION].[Container Size].CurrentMember.MEMBER_CAPTION = '20'.
. В вашем запросе вы хотите выбрать свой множитель на основе значения размера контейнера. Чтобы получить значение, которое оценивается в данный момент, мы используем «Currentmember». Кроме того, вы проверяете свойство «MEMBER_CAPTION» вашего CURRENTMEMBER. Способ проверки значения не будет работать. MDX оценит
[CONTAINER INSTANCE DIMENSION].[Container Size] = '20'
как true, поскольку вы сравниваете атрибут измерения со значением. Следовательно, ваше предложение Else дает результат.
Ниже приведен пример AdventureWorks.
with member
[Measures].[Internet Sales AmountCase]
as
case
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '38' then [Measures].[Internet Sales Amount]*1
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '40' then [Measures].[Internet Sales Amount]*2
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '46' then [Measures].[Internet Sales Amount]*3
else -99
end
select
{[Measures].[Internet Sales Amount],[Measures].[Internet Sales AmountCase]}
on columns,
([Date].[Month of Year].[Month of Year],[Product].[Size].[38]:[Product].[Size].[70])
on rows
from [Adventure Works]
Это обычная ошибка Javascript с простым решением:
Просто укажите основание или «основание системы счисления», например:
parseInt('08',10); // 8
Вы также можете использовать Число :
Number('08'); // 8
Эта проблема не может копироваться в последнем Chrome, ни Firefox (2019).
Из документации parseInt используйте необязательный аргумент radix, чтобы указать основание-10:
parseInt('08', 10); //equals 8
parseInt('09', 10); //equals 9
Это мне кажется педантичен, запутан и многословен (действительно, дополнительный аргумент в каждом parseInt?), поэтому я надеюсь, что есть лучший способ.
function parseDecimal(s) { return parseInt(s, 10); }
edit: создание вашей собственной функции для выполнения того, что вы действительно хотите, - это просто вариант, если вам не нравится постоянно добавлять ", 10" к вызову parseInt (). Его недостатком является нестандартная функция: для вас удобнее, если вы используете его часто, но, возможно, больше запутывает других.
Было бы очень непослушно заменить parseInt версией, предполагающей десятичное число, если у нее нет второго параметра? (примечание - не тестировалось)
parseIntImpl = parseInt
parseInt = function(str, base){return parseIntImpl(str, base ? base : 10)}
] Если вы [] знаете [], что ваше значение будет в подписанном 32-битовом целочисленном диапазоне, то []~~x[
] сделает все правильно во всех сценариях. [
~~"08" === 8
~~"foobar" === 0
~~(1.99) === 1
~~(-1.99) === -1
]
[]Если вы ищете двоичное не ([]~[
]), то спецификация требует преобразования "ToInt32" для аргумента, который делает очевидное преобразование в Int32 и указан, чтобы принудить []NaN[
] значения к нулю.[
]Да, это невероятно хакерское решение, но так удобно...[
].