Я понимаю, что функция InterpolateRGBColors возвращает цвет по положению значения от 0 до 1 ... Таким образом, кажется, что это возможно только с процентами, а не с числами ...
Есть ли способ иметь такую же функциональность, но на основе минимальных и максимальных значений, возвращаемых в наборе?
Я хочу присвоить цвета моей мере, но в диапазоне от min ([Measures]. [NbSejours]) до max ([Measures]. [NbSejours]) (не от 0 до 1) ...
WITH
MEMBER [Measures].[color] AS
InterpolateRGBColors(
[Measures].[NbSejours]
,rgb(176,224,230)
,rgb(135,206,235)
,rgb(0,191,255)
,rgb(100,149,237)
,rgb(0,0,255)
,rgb(0,0,139)
,rgb(25,25,112)
), BACK_COLOR=currentCellValue()
SELECT
{
{[Measures].[NbSejours]}
,[Measures].[color]
} ON COLUMNS
,{
NonEmpty
(
[Etablissement].[Etablissement].[Etablissement].ALLMEMBERS
,[Measures].[NbSejours]
)
} ON ROWS
FROM
(
SELECT
{{[Periode].[Periode].[All-M].&[2013]}} ON 0
FROM [Cube]
)
CELL PROPERTIES
STYLE
,CLASSNAME
,VALUE
,FORMATTED_VALUE;
Есть способ сделать это ?
2 ответа
InterpolateRGBColors ожидает числовое значение от 0 до 1 для интерполяции. Поэтому нам нужно масштабировать нашу меру, чтобы получить правильные цвета.
Пример есть в нашей живой демонстрации, здесь.
Нам нужно масштабировать [Measures]. [NbSejours] между 0,1. В icCube DistributionFlat и DistributionRank нет двух задокументированных функций.
Неэффективная версия
WITH
SET [AxisX] AS NonEmpty([Etablissement].Etablissement].Etablissement].ALLMEMBERS,[Measures].[NbSejours])
FUNCTION distr(x_) as DistributionFlat( [AxisX], [Measures].[NbSejours], x_ )
MEMBER [Measures].[color] AS
InterpolateRGBColors(
distr([Measures].[NbSejours])
,rgb(176,224,230)
,rgb(135,206,235)
,rgb(0,191,255)
,rgb(100,149,237)
,rgb(0,0,255)
,rgb(0,0,139)
,rgb(25,25,112)
), BACK_COLOR=currentCellValue()
....
Когда у меня будет немного времени, я напишу версию с использованием векторов (здесь a> и здесь), который более эффективен, чем в приведенном выше примере. вычислять каждый раз значения для набора.
Надеюсь, это поможет
Я не знаю icCube
, поэтому следующее может не сработать, хотя я использовал стандартные функции. Как прокомментировал @George, вы можете использовать стандартную функцию RANK
, чтобы найти относительное положение каждого члена.
Вам нужно будет ввести это значение в определение [Measures].[color]
...
WITH
SET [estMembersOrdered] AS
ORDER(
[Etablissement].[Etablissement].[Etablissement].ALLMEMBERS
,[Measures].[NbSejours]
,BDESC
)
MEMBER [Measures].[rnkEtablissement] AS
RANK(
[Etablissement].[Etablissement].CURRENTMEMBER
, [estMembersOrdered]
)
MEMBER [Measures].[color] AS
InterpolateRGBColors(
[Measures].[NbSejours]
,rgb(176,224,230)
,rgb(135,206,235)
,rgb(0,191,255)
,rgb(100,149,237)
,rgb(0,0,255)
,rgb(0,0,139)
,rgb(25,25,112)
), BACK_COLOR=currentCellValue()
SELECT
{
{[Measures].[NbSejours]}
,[Measures].[color]
,[Measures].[rnkEtablissement]
} ON COLUMNS
,{
NonEmpty
(
[Etablissement].[Etablissement].[Etablissement].ALLMEMBERS
,[Measures].[NbSejours]
)
} ON ROWS
FROM
(
SELECT
{{[Periode].[Periode].[All-M].&[2013]}} ON 0
FROM [Cube]
)
CELL PROPERTIES
STYLE
,CLASSNAME
,VALUE
,FORMATTED_VALUE;
Похожие вопросы
Новые вопросы
colors
Используйте этот тег для вопросов о представлении или управлении цветами на языке программирования.