Мы используем службы аналитики Azure для размещения наших кубов. Мы столкнулись с проблемой при чтении данных через EXCEL.
Проблема в том, что итоговые значения (и промежуточные итоги) рассчитываются неправильно. Изначально мы нашли эту проблему в EXCEL. В строке итоговой суммы сводной таблицы отображалась неправильная сумма, которая должна быть суммой для всех строк. Позже выяснилось, что мы можем воспроизвести проблему также в запросе MDX.
Значения столбцов задаются вычисляемым показателем, который вычисляет проданные позиции (объем) продукта год назад.
Например, для продукта А мы оглядываемся на год назад и получаем сумму всех проданных товаров. Это прекрасно работает, если у нас есть фильтр для определенного года. Это дает сбой, когда нам нужен промежуточный итог или итог без применения каких-либо фильтров года или когда в фильтре выбрано несколько лет.
Вот формула DAX, используемая для расчета объема:
IF (
HASONEVALUE( 'Calendar'[Year] ),
CALCULATE(
[volume],
FILTER(
ALL( Calendar ),
'Calendar'[Year] = VALUES( 'Calendar'[Year] )-1
&& 'Calendar'[ISO_DAY] <= MAX( 'Calendar'[ISO_DAY] )
)
),
IF(ISBLANK([Turnover]),BLANK(),CALCULATE([Volume],SAMEPERIODLASTYEAR(DATESBETWEEN('Calendar'[PK_Date],[MinSalesDateThisYear],[MaxSalesDate]))))
)
- Оборот - сумма и фильтрация по магазинам
- Объем - сумма и фильтрация по магазинам
- MinSalesDateThisYear - первый день текущего года
- MaxSalesDate - последнийдень, когда мы продали продукт
Заявленный профилировщик SSMS и захватил то, что генерирует EXCEL.
Без фильтра по годам (неверные итоги):
SELECT
{
[Measures].[Volume LYTD]
} DIMENSION PROPERTIES parent_unique_name, hierarchy_unique_name ON COLUMNS,
NON EMPTY HIERARCHIZE(
ADDCALCULATEDMEMBERS(
{
DRILLDOWNLEVEL({
[Products].[Product].[All]
})
}
)
) DIMENSION PROPERTIES parent_unique_name, hierarchy_unique_name ON ROWS
FROM (SELECT
(
{
[Products].[Product].&[1],
[Products].[Product].&[2],
[Products].[Product].&[3],
[Products].[Product].&[4],
[Products].[Product].&[5],
...
}
) ON COLUMNS
FROM [MyCube])
WHERE (
[Calendar].[YW].[All]
) CELL PROPERTIES value, format_string, language, back_color, fore_color,
font_flags
----- Volume LYTD
All 126715
Product1 26337
Product2 14525
Product3 9602
Product4 42492
Product5 28494
Product6 5154
С фильтром года (правильные итоги):
SELECT
NON EMPTY HIERARCHIZE(
ADDCALCULATEDMEMBERS(
{
DRILLDOWNLEVEL({
[Products].[Product].[All]
})
}
)
) DIMENSION PROPERTIES parent_unique_name, hierarchy_unique_name ON COLUMNS
FROM (SELECT
(
{
[Products].[Product].&[1],
[Products].[Product].&[2],
[Products].[Product].&[3],
[Products].[Product].&[4],
[Products].[Product].&[5],
...
}
) ON COLUMNS
FROM [MyCube])
WHERE (
[Calendar].[YW].[Year].&[2018],
[Measures].[Volume LYTD]
) CELL PROPERTIES value, format_string, language, back_color, fore_color,
font_flags
All roduct1 Product2 Product3 Product4 Product5 Product6 Product7 Product8 Product9 Product10
150060 3352 11545 24037 4 11848 4 4 55088 35049 9129
Я не могу понять, что здесь происходит. Я также обнаружил, что в статье MS указано, что EXCEL неправильно вычисляет итоги из-за порядка выполняемой им операции, но, поскольку я могу воспроизвести это при запросе MDX, я подозреваю, что это что-то из функций DAX или куба.
У кого-нибудь есть идеи, что я могу делать дальше?
Кроме того, я знаю, что, возможно, не предоставил некоторую информацию, поэтому, пожалуйста, спросите. Я буду рад предоставить их.
Примечание: я знаю, что есть запись с аналогичной проблемой, но я думаю, что эта проблема немного отличается, и плюс я не хотелпохитить этот пост.