Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 June 17

L

Les in SqlCom.ru - Стиль жизни SQL
Всем привет!
Наши хорошие друзья из Arenadata.io приглашают присоединиться к сообществу массивно-параллельной open-source СУБД Greenplum: https://t.me/greenplum_russia
Greenplum - это:
- шардируемая аналитическая СУБД
- горизонтальное масштабирование до десятков ПБ и сотен серверов
- полная совместимость с PostgreSQL
- ACID, ANSI SQL
- колоночное и строковое хранение + сжатие
- открытый исходный код (Apache 2)
Ставится в три клика, есть GUI и базовый мониторинг из коробки.
Приходите в чат, задавайте вопросы - все расскажем, покажем и поможем :)
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
народ привет
помогите разобраться с mdх (#mdx, #ssas) запросом
попробую объяснить что нужно - возможно криво получится
1. Мне нужно сделать диапазоны чеков - мы это сделали на уровне dwh добавили поле scale_id как атрибут в таблицы fct_sales
2. сделали иерархию атрибутов для scale  - чтобы получить диапазоны
вроде все работает, но у нас есть один вычисляемый показатель - факт продажи
формула его такая
[MEASURES].[sls_fact_grs1] + [Measures].[cmp_charge_grs] + [Measures].[cmp_debit_grs]

cmp - это бонусы начисление и списание

бонусы берутся из другой из другого источника - fct_compensation

если в запрос просто вывести показатели без cmp* то данные верны. и разбиение тоже вменяемое
На скрине показал что дает excel
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
В Excel можно посмотреть MDX, который генерится, насколько я знаю.
источник

IZ

Ilia Zviagin in SqlCom.ru - Стиль жизни SQL
Max Chistyakov
Спасибо, поэкспериментирую с версией драйвера)
Там может быть запросто что нет правильной версии драйверов, потому что такой софт часто просто дебилы какие-то пишут...
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
Alex
В Excel можно посмотреть MDX, который генерится, насколько я знаю.
--AS [MEASURES].[sls_fact_grs1] + [Measures].[cmp_charge_grs] + [Measures].[cmp_debit_grs],
with MEMBER [Measures].[cmp]
AS
--[sls_fact_grs1] <> 0 and
 iif( [sls_fact_grs1] <> 0 and ([Measures].[cmp_charge_grs] <> 0 or [Measures].[cmp_debit_grs] <> 0), [MEASURES].[sls_fact_grs1] + [Measures].[cmp_charge_grs] + [Measures].[cmp_debit_grs], [sls_fact_grs1])
 
--+ [Measures].[cmp_charge_grs] + [Measures].[cmp_debit_grs]
,
FORMAT_STRING = "#,#.00", VISIBLE = 1, ASSOCIATED_MEASURE_GROUP = 'fct_sales'
SELECT
  NON EMPTY {
   [Measures].[chq_cnt],
   [Measures].[sls_sale_grs],
   [Measures].[sls_doc_grs],
   [Measures].sls_fact_grs,
   [Measures].[cmp]
   
   --
//    ,[Measures].[sls_fact_net1],
 //  ,iif(isempty([Measures].[mov_quantity]),null,1)
  // , [Measures].[cmp_debit_grs]
   } ON COLUMNS
   ,NON EMPTY { ([dct_scale].[ps-s].[name].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
//  FROM (
//  SELECT ( { [dct_scale].[scale_id].&[92510] }
//  ) ON COLUMNS
//  
 FROM [sales]
--  )
 
 CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
примерный запрос
источник

IZ

Ilia Zviagin in SqlCom.ru - Стиль жизни SQL
Ilia Zviagin
Там может быть запросто что нет правильной версии драйверов, потому что такой софт часто просто дебилы какие-то пишут...
Это не первый раз когда я с таким встречаюсь.
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
результат
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
Вы можете конкретную ячейку обвести и сказать, где неправильно, и сказать, сколько должно быть? ТАк неудобно, ну и экранируйте в телеграме сообщения с кодом)
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
Anatoly Kotelevets
народ привет
помогите разобраться с mdх (#mdx, #ssas) запросом
попробую объяснить что нужно - возможно криво получится
1. Мне нужно сделать диапазоны чеков - мы это сделали на уровне dwh добавили поле scale_id как атрибут в таблицы fct_sales
2. сделали иерархию атрибутов для scale  - чтобы получить диапазоны
вроде все работает, но у нас есть один вычисляемый показатель - факт продажи
формула его такая
[MEASURES].[sls_fact_grs1] + [Measures].[cmp_charge_grs] + [Measures].[cmp_debit_grs]

cmp - это бонусы начисление и списание

бонусы берутся из другой из другого источника - fct_compensation

если в запрос просто вывести показатели без cmp* то данные верны. и разбиение тоже вменяемое
На скрине показал что дает excel
забыл сказать что связи между fct_sales и fct_compensation many to many
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
Alex
Вы можете конкретную ячейку обвести и сказать, где неправильно, и сказать, сколько должно быть? ТАк неудобно, ну и экранируйте в телеграме сообщения с кодом)
вот тут показал что не верно
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
Боюсь, без погружения тут не ответить.
Напишите сами mdx, получите правильный результат по всем мерам, а потом попытайтесь воспроизведисти его в excel.
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
дело, в том что когда пишу сам mdx тоже получаю не верный результат
результат начинает быть "плохим" когда добавляю информацию по компенсации
т.е. к факту прибавляю данные из другой таблицы фактов
которая связана many-no-many
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
Ну значит вопрос к архитектуре данных, а не к mdx.
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
Alex
Ну значит вопрос к архитектуре данных, а не к mdx.
тогда как написать, правильно запрос, а может где ошибся

SELECT
  {
  [Measures].[chq_cnt],
  [Measures].[sls_sale_grs],
  [Measures].[sls_doc_grs],
  [Measures].[cmp_charge_grs],
  [Measures].[cmp_debit_grs]

  } ON COLUMNS    ,
  NON EMPTY {([dct_scale].[ps-s].[name].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM (
SELECT ( {
[dct_scale].[scale_id].&[92510] , [dct_scale].[scale_id].&[92520]
 }
) ON COLUMNS

FROM [sales]
)
WHERE ( dct_docs.doc_id.&[757246100] )
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
Если вы даже не используете конструкции "with member", то с запросом проблем никаких нет.
Вы говорите, что у вас есть данные там, где их быть не должно, это значит, что копать нужно в сторону того, как собирается куб и почему туда попадают данные, которые попадать не должны.

Можно, конечно, извратиться и написать вычислимую меру, просто закостылив условие,
"Если на пересечении с определенным элементом измерения, то 0, иначе значение", но мне кажется, это неверный подход)
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
есть подозрение что это из-за связи двух group они связаны между собой many-to-many
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
many-to-many, Вообще, не очень прозрачный тип связи)
источник

AK

Anatoly Kotelevets in SqlCom.ru - Стиль жизни SQL
т.к тестовый куб, решил удалил сейчас эту связи, куб перестроится буду смотреть что получится
источник

АС

Алексей Савин... in SqlCom.ru - Стиль жизни SQL
Привет.

Почему запрос даёт разные результаты?

Use db1
Go

Select *
From db1.dbo.table1
Where id = 1

Use db2 (у меня проблема если бд указана powerbi)
Go

Select *
From db1.dbo.table1
Where id = 1
источник

A

Alex in SqlCom.ru - Стиль жизни SQL
А результаты какие?
источник