2014-01-07 3 views
0

У меня есть следующий DAX запрос для Adventure Works БД:DAX Группировка и сумма

evaluate 
(
    summarize 
    (
     'Internet Sales', 
     'Product Category'[Product Category Name], 
     'Product Subcategory'[Product Subcategory Name], 
     'Product'[Product Name], 
     'Date'[Calendar Year], 
     "Total Sales Amount", sum('Internet Sales'[Sales Amount]) 
    ) 
) 
order by 'Product Category'[Product Category Name], 
     'Product Subcategory'[Product Subcategory Name], 
     'Product'[Product Name] 

Это возвращает данные в следующем формате:

Accessories Bike Racks Hitch Rack - 4-Bike 2008 22920 
Accessories Bike Racks Hitch Rack - 4-Bike 2007 16440 
Accessories Bike Stands All-Purpose Bike Stand 2008 20670 

я хочу вернуть его, как это:

CATEGORY  SUB CATEGORY PRODUCT     2007  2008  2009  2010 
Accessories Bike Racks Hitch Rack - 4-Bike 22920 16440  22920 16440 
Accessories Bike Stands All-Purpose Bike Stand 20850 20670  22920 16440 

В результирующем наборе должна быть колонка для каждого года.

Возможно ли это? если да, то как? Функция

Благодаря

ответ

0

Это не представляется возможным, так как это не так, как это должно работать. Вернее, он работает несколько автоматически, когда вы переходите из DAX Studio в фактическую меру.

Предполагая, что вы используете годы в качестве заголовков строк в сводной таблице, они автоматически накладывают фильтр на результат суммирования в вашей мере (на самом деле фильтр уже применяется для таблицы ввода суммирования).

Таким образом, результаты в соответствующем году будут отображаться в вашей таблице суммирования (т. Е. Вы можете просто удалить группу по столбцу за год).

1

Что-то вроде:

EVALUATE 
ADDCOLUMNS(
    SUMMARIZE(
     'Internet Sales', 
     'Product Category'[Product Category Name], 
     'Product Subcategory'[Product Subcategory Name], 
     'Product'[Product Name] 
     ), 
"Total Sales Amount", CALCULATE(SUM('Internet Sales'[Sales Amount])), 
"2007", CALCULATE(SUM('Internet Sales'[Sales Amount]), 'Date'[Calendar Year] = 2007) 
"2008", CALCULATE(SUM('Internet Sales'[Sales Amount]), 'Date'[Calendar Year] = 2008) 
"2009", CALCULATE(SUM('Internet Sales'[Sales Amount]), 'Date'[Calendar Year] = 2009) 
) 
ORDER BY 'Product Category'[Product Category Name], 
    'Product Subcategory'[Product Subcategory Name], 
    'Product'[Product Name] 

DAX не так дружелюбен, чтобы «рубить решение», как и другие языки, как SQL. В DAX отсутствует функция поворота и единственный способ поворота элементов - это вручную.

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

Если есть лучшее решение, я был бы рад услышать, я все еще смотрю на себя.

BTW вам не нужны скобки для функции оценки, поэтому я лично не буду их использовать, но каждый из них будет сам по себе.

Смежные вопросы