MDX: Направете стойност на мярката 0 въз основа на флаг

Ще бъда много благодарен за всяка помощ по този въпрос.

Имам мярка, наречена „Продажби“, попълнена със стойности, но се опитвам да превърна стойността „Продажби“ на 0, когато „Флагът за продажби“ е зададен на 0.

Важна забележка: Флагът за продажби се базира на дата (най-ниско ниво на детайлност).

въведете описание на изображението тук

Трудността, която наистина изпитвам и не мога да се справя, е как се опитвам да покажа резултата от MDX.

Както беше обяснено по-горе, бих искал да направя стойността на „Продажби“ 0 винаги, когато имаме 0 в „Флаг за продажби“ (което се основава на датата), но когато стартирам MDX скрипта, не бих искал на ROWS за да НЕ показвате датата, а вместо това само седмицата (по-високо ниво до дата), както е показано по-долу:

въведете описание на изображението тук

Наистина прекарах часове в това и изглежда не мога да разбера как можем да създадем тази необходима персонализирана мярка за продажби въз основа на флага за продажби на ниво дата, но като MDX резултатът показва РЕДОВЕ на ниво седмица.

Лаз


person GonnerDev    schedule 29.05.2018    source източник


Отговори (2)


Трябва да дефинирате члена в MDX преди избора. Нещо такова:

WITH MEMBER [Measures].[Fixed Sales] as IIF([Sales Flag].currentMember=1,[Sales], 0)

SELECT [Measures].[Fixed Sales] on 0, [Sales Flag] on 1 from [Cube]

Пиша кода без SSAS тук, така че може да не е 100% правилният синтаксис, но можете да получите общата идея;)

Можете да добавите iif в частта SELECT, но смятам, че създаването на член е по-чистото решение.

SELECT IIF([Sales Flag].currentMember=1,[Sales], 0) on 0, [Sales Flag] on 1 from [Cube]

Ако имате контрол върху куба в SSAS, можете да създадете изчислим член там и да имате по-лесен достъп до него.

person Veselin Davidov    schedule 30.05.2018
comment
Благодаря ви за отговора! Със сигурност ще разгледам отговора ви и ще се свържа с вас с актуална информация :) - person GonnerDev; 30.05.2018
comment
Понастоящем нямам SSAS на този компютър, за да тествам заявката, но схванахте идеята;) Ако често имате нужда от този показател, бих преместил логиката в CUBE и ще запазя mdx заявките прости - person Veselin Davidov; 30.05.2018
comment
Съжалявам, Веселин, но не мисля, че ще работи, защото на ниво седмица Sales Flag ще бъде агрегиран като SUM и никога няма да видим 0 (или 1), освен ако всички членове (един член) нямат този флаг като 0 (като 1). - person Alex Peshik; 30.05.2018
comment
Ако го направите в куба, тогава ще работи. Ако агрегирате на ниво седмица за MDX и изчисленият член е в деня (или дори в ключа на измерението), тогава стойността ще бъде правилна. - person Veselin Davidov; 30.05.2018
comment
Какво имате предвид под съвкупност на ниво ден? Тук виждам само опцията SCOPE. Защото ако флагът за продажби не е на оста, тази част няма да работи: [Sales Flag].currentMember. - person Alex Peshik; 30.05.2018

Радвам се да чуя дали отговорът на Веселин работи за вас, но ако не...

Възможни са и няколко подхода.

  1. Използвайте Measure expression за измерване на продажбите:

Израз за измерване

  1. Използвайте команда SCOPE за ниво ден (ако е ключово ниво на измерение Дата). Ако не е ключово ниво, трябва да обобщите на ВСЯКО ниво (седмица, година и т.н.), за да емулирате AggregateFunction на мярката за продажби, но с актуализирано поведение за един флаг:

    SCOPE([Дата].[Вашата йерархия на дати].[Ден].членове,[Мерки].[Продажби]); ТОВА=IIF([Флаг за продажби].Текущ член = 1,[Мерки].[Продажби],0); КРАЙЕН ОБХВАТ;

  2. Актуализирайте логиката в DSV, за да умножите колоната Sales по SalesFlag. Това е най-лесният начин от гледна точка на T-SQL.

person Alex Peshik    schedule 30.05.2018