Вычисляемое выражение члена в SSAS 2008 - PullRequest
1 голос
/ 19 марта 2012

Мне нужно создать вычисляемый элемент в кубе, чтобы показывать мне общую сумму накладных по каждому клиенту меньше или равную 60 дням.

Я понимаю, что могу найти текущую дату минус датусчета-фактуры и, если результат в днях меньше или равен 60, то сделать сумму всех счетов-фактур для каждого клиента.

Я не представляю, как внедрить это в выражение для вычисляемогочлен.Я сделал это, но я получаю ошибку в SELECT, и я не знаю, почему:

CREATE MEMBER CURRENTCUBE.[Measures].[Importe60]
AS Sum([Measures].[Importe de la factura])

SELECT [Measures].[Importe60] ON COLUMNS,
[Clientes].[Nombre].Members ON ROWS
FROM CuboVentas
WHERE DateDiff(dd,[Facturas].[Fecha Factura],getDate())<=60,

VISIBLE = 1, ASSOCIATED_MEASURE_GROUP = 'Facturas clientes';

Кто-нибудь знает, что я делаю неправильно?

1 Ответ

1 голос
/ 21 марта 2012

Проблема в вашем предложении WHERE. В MDX предложение WHERE следует использовать как средство фильтрации пространства куба. Тогда все в предложении SELECT основано на оставшемся «подкубе».

Кроме того, нет необходимости в вычисляемом элементе ... функция SUM () в этом случае избыточна (при условии, что функция агрегирования, заданная для [Меры]. [Importe de la factura] равна SUM).

Вот один из способов написать запрос, близкий к формату, который у вас есть выше ...

SELECT
    {
        [Measures].[<<measure>>]
    } ON 0,
    {
        [Business Unit].[Division].[Division].Members
    } ON 1
FROM
    [<<cube>>]
WHERE
    {StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]").Lag(59)
    :
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]")}

Обратите внимание, как предложение WHERE определяет набор по измерению [Дата заказа]. Это в основном говорит, что дайте мне все пространство куба по всем измерениям ... за исключением измерения даты заказа, для которого я просто хочу, чтобы набор был указан ".

Кроме того, если вы напишите запрос наподобие следующего, вам будет немного легче понять, что происходит ...

WITH
SET [Past 60 days] AS
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]").Lag(59)
    :
    StrToMember("[Order Date].[Date Key].[" + Format(now(), "yyyyMMdd") + "]")
MEMBER [Measures].[Total Sales Past 60 days] AS
    SUM(
         [Past 60 days]
        ,[Measures].[<<measure>>]
    )
SELECT
    {
        [Measures].[Total Sales Past 60 days]
    } ON 0,
    {
        [Business Unit].[Division].[Division].Members
    } ON 1
FROM
    [<<cube>>]

Примечание. Формула "StrToMember ()" работает в моем кубе, поскольку ключ даты имеет формат ГГГГММДД. Ваш может быть в другом формате, поэтому вам, возможно, придется настроить его.

...