Курс, семинар, тренинг «Управление персоналом: социальные стили. Типология личности. » – обучение в в 2021-2022 году

Курс, семинар, тренинг «Управление персоналом: социальные стили. Типология личности. » - обучение в  в 2021-2022 году Аналитика

Наливать-то будешь?

Чувствуете, что-то я пропустил? Вроде бы обещал данные из SQL Server в Vertica переливать, и тут взял и съехал с темы, негодяй!

Злодеяние это было намеренным, я просто обязан был расшифровать вам кое-какую терминологию. Теперь можно ехать дальше.

План у нас был такой:

    Сделать дагНагенерить таскиПосмотреть, как всё красиво
  1. Присваивать заливкам номера сессий
  2. Забрать данные из SQL Server
  3. Положить данные в Vertica
  4. Собрать статистику

Итак, чтобы всё это запустить, я сделал маленькое дополнение к нашему docker-compose.yml:

Там мы поднимаем:

Запускаем всё добро с помощью чуть более сложной, чем в прошлый раз, команды:

$ docker-compose -f docker-compose.yml -f docker-compose.db.yml up --scale worker=3

Что нагенерировал наш чудорандомайзер, можно, воспользовавшись пунктом Data Profiling/Ad Hoc Query:

Курс, семинар, тренинг «Управление персоналом: социальные стили. Типология личности. » - обучение в  в 2021-2022 году
Главное, не показывать это аналитикам

Подробно останавливаться на ETL-сессиях я не буду, там всё тривиально: делаем базу, в ней табличку, оборачиваем всё менеджером контекста, и теперь делаем так:

with Session(task_name) as session:
    print('Load', session.id, 'started')

    # Load worflow
    ...

    session.successful = True
    session.loaded_rows = 15
session.py

from sys import stderr

class Session:
    """ETL workflow session

    Example:
        with Session(task_name) as session:
            print(session.id)
            session.successful = True
            session.loaded_rows = 15
            session.comment = 'Well done'
    """

    def __init__(self, connection, task_name):
        self.connection = connection
        self.connection.autocommit = True

        self._task_name = task_name
        self._id = None

        self.loaded_rows = None
        self.successful = None
        self.comment = None

    def __enter__(self):
        return self.open()

    def __exit__(self, exc_type, exc_val, exc_tb):
        if any(exc_type, exc_val, exc_tb):
            self.successful = False
            self.comment = f'{exc_type}: {exc_val}n{exc_tb}'
            print(exc_type, exc_val, exc_tb, file=stderr)
        self.close()

    def __repr__(self):
        return (f'<{self.__class__.__name__} ' 
                f'id={self.id} ' 
                f'task_name="{self.task_name}">')

    @property
    def task_name(self):
        return self._task_name

    @property
    def id(self):
        return self._id

    def _execute(self, query, *args):
        with self.connection.cursor() as cursor:
            cursor.execute(query, args)
            return cursor.fetchone()[0]

    def _create(self):
        query = """
            CREATE TABLE IF NOT EXISTS sessions (
                id          SERIAL       NOT NULL PRIMARY KEY,
                task_name   VARCHAR(200) NOT NULL,

                started     TIMESTAMPTZ  NOT NULL DEFAULT current_timestamp,
                finished    TIMESTAMPTZ           DEFAULT current_timestamp,
                successful  BOOL,

                loaded_rows INT,
                comment     VARCHAR(500)
            );
            """
        self._execute(query)

    def open(self):
        query = """
            INSERT INTO sessions (task_name, finished)
            VALUES (%s, NULL)
            RETURNING id;
            """
        self._id = self._execute(query, self.task_name)
        print(self, 'opened')
        return self

    def close(self):
        if not self._id:
            raise SessionClosedError('Session is not open')
        query = """
            UPDATE sessions
            SET
                finished    = DEFAULT,
                successful  = %s,
                loaded_rows = %s,
                comment     = %s
            WHERE
                id = %s
            RETURNING id;
            """
        self._execute(query, self.successful, self.loaded_rows,
                      self.comment, self.id)
        print(self, 'closed',
              ', successful: ', self.successful,
              ', Loaded: ', self.loaded_rows,
              ', comment:', self.comment)

class SessionError(Exception):
    pass

class SessionClosedError(SessionError):
    pass

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

source_conn = MsSqlHook(mssql_conn_id=src_conn_id, schema=src_schema).get_conn()

query = f"""
    SELECT 
        id, start_time, end_time, type, data
    FROM dbo.Orders
    WHERE
        CONVERT(DATE, start_time) = '{dt}'
    """

df = pd.read_sql_query(query, source_conn)
  1. С помощью хука получим из Airflow pymssql-коннект
  2. В запрос подставим ограничение в виде даты — в функцию её подбросит шаблонизатор.
  3. Скармливаем наш запрос pandas, который достанет для нас DataFrame — он нам пригодится в дальнейшем.

Я использую подстановку {dt} вместо параметра запроса %s не потому, что я злобный Буратино, а потому что pandas не может совладать с pymssql и подсовывает последнему params: List, хотя тот очень хочет tuple.
Также обратите внимание, что разработчик pymssql решил больше его не поддерживать, и самое время съехать на pyodbc.

Посмотрим, чем Airflow нашпиговал аргументы наших функций:

Если данных не оказалось, то продолжать смысла нет. Но считать заливку успешной тоже странно. Но это и не ошибка. А-а-а, что делать?! А вот что:

if df.empty:
    raise AirflowSkipException('No rows to load')

AirflowSkipException скажет Airflow, что ошибки, собственно нет, а таск мы пропускаем. В интерфейсе будет не зеленый и не красный квадратик, а цвета pink.

Подбросим нашим данным несколько колонок:

df['etl_source'] = src_schema
df['etl_id'] = session.id
df['hash_id'] = hash_pandas_object(df[['etl_source', 'id']])

А именно:

Остался предпоследний шаг: залить всё в Vertica. А, как ни странно, один из самых

эффектных

эффективных способов сделать это — через CSV!

# Export data to CSV buffer
buffer = StringIO()
df.to_csv(buffer,
          index=False, sep='|', na_rep='NUL', quoting=csv.QUOTE_MINIMAL,
          header=False, float_format='%.8f', doublequote=False, escapechar='\')
buffer.seek(0)

# Push CSV
target_conn = VerticaHook(vertica_conn_id=target_conn_id).get_conn()

copy_stmt = f"""
    COPY {target_table}({df.columns.to_list()}) 
    FROM STDIN 
    DELIMITER '|' 
    ENCLOSED '"' 
    ABORT ON ERROR 
    NULL 'NUL'
    """

cursor = target_conn.cursor()
cursor.copy(copy_stmt, buffer)
  1. Мы делаем спецприёмник StringIO.
  2. pandas любезно сложит в него наш DataFrame в виде CSV-строк.
  3. Откроем соединение к нашей любимой Vertica хуком.
  4. А теперь с помощью copy() отправим наши данные прямо в Вертику!

Из драйвера заберем, сколько строчек засыпалось, и скажем менеджеру сессии, что всё ОК:

session.loaded_rows = cursor.rowcount
session.successful = True

Вот и всё.

На проде мы создаем целевую табличку вручную. Здесь же я позволил себе небольшой автомат:

create_schema_query = f'CREATE SCHEMA IF NOT EXISTS {target_schema};'
create_table_query = f"""
    CREATE TABLE IF NOT EXISTS {target_schema}.{target_table} (
         id         INT,
         start_time TIMESTAMP,
         end_time   TIMESTAMP,
         type       INT,
         data       VARCHAR(32),
         etl_source VARCHAR(200),
         etl_id     INT,
         hash_id    INT PRIMARY KEY
     );"""

create_table = VerticaOperator(
    task_id='create_target',
    sql=[create_schema_query,
         create_table_query],
    vertica_conn_id=target_conn_id,
    task_concurrency=1,
    dag=dag)

Я с помощью VerticaOperator() создаю схему БД и таблицу (если их еще нет, естественно). Главное, правильно расставить зависимости:

Читать

• готов тратить на вас свое бесценное время;

• почти всегда готов купить то, что его устроит.

И все это клиент сделал до того, как узнал, что у него есть проблемы со знанием вашего продукта.

Конечно, клиент не знает продукт. И это – барьер. Барьер следует убрать. Это всего лишь одна из многих стандартных сложностей.

Самые главные потребности/проблемы клиента появились задолго до того, как он обратился к вам!

Клиент либо верит, что с помощью вашего продукта он решит свои задачи, либо не верит. И если верит, то покупает. А если не верит, то «нет времени», «может быть, позже», «руководство не согласовало», «Иван Иванович в командировке», «слишком дорого» и т. д.

Менеджер по продажам может или перейти на поле бизнес-проблем клиента, или не перейти. И если менеджер сосредоточится только на функционале, то клиенту придется продавать себе самому. А заодно и продавать своим коллегам. Далеко не каждый клиент готов заниматься работой, плату за которую получит другой человек. Может быть, вы сами готовы?

• Решение не поможет в принципе.

• Сотрудники клиента не будут им пользоваться.

• Клиент окажется в трудную минуту без поддержки своего менеджера.

А это потери времени и денег. Что вы сказали и сделали, чтобы нивелировать эти риски? Обсуждение одних лишь характеристик мало помогает. При этом клиент может у вас ничего особенного не спрашивать, справедливо полагая, что на сложные вопросы вы не ответите.

И еще один важный момент. Что лучше всего вы знаете: аспекты бизнеса по основным видам деятельности или функциональность вашего продукта? Я думаю, ответ очевиден. Поэтому многие продавцы продают именно функциональность. Но это не продажи, и, как следствие, вы зарабатываете мало. А что нужно, чтобы зарабатывать много? Слушать, читать, спрашивать и думать. И хоть немного знать психологию людей.

Глава написана Николаем Ивановым.

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

Меня заинтересовало мнение Ольги Ягудиной, тренера по продажам из Санкт-Петербурга, члена Санкт-Петербургского cоюза предпринимателей. Она классифицировала психотипы так:

• аналитик;

• драйвер;

• дружелюбный;

• экспрессивный.

Рассмотрим каждый психотип более подробно.

Особенность аналитиков – стремление вникать в детали, разбираться в узконаправленных сферах, следовать логическому мышлению. Спокойные, часто флегматичные, они незаменимые командные игроки.

Вспоминается случай, когда мой знакомый на полном серьезе сделал таблицу в Excel, где с помощью графиков сравнил два числа – 2 и 5. Этим он хотел показать, что при выполнении определенной задачи мы отстали от своих коллег более чем в два раза.

Как определить аналитиков? Внешне эти люди консервативны: строгий костюм, идеальные стрелки на брюках, начищенные ботинки, аккуратная прическа, чисто выбритое лицо.

Аналитики, как правило, интроверты. Стараются избегать общества и сосредотачиваются на собственных умозаключениях. Следуют логике, поэтому предпочитают осмысленные решения и не поддаются эмоциональным всплескам. У них всегда присутствует холодный расчет, при этом они предельно ответственны. Если аналитик берется за решение какой-либо задачи, то обязательно доведет дело до конца. Он не позволит себе схалтурить, пропустить, не заметить деталей. Именно такая проницательность и позволяет аналитикам получать более высокие результаты при равных условиях соперничества. Но есть и другая сторона – эти люди, как правило, одиноки. Ценят дружеские отношения, но друзей отбирают тщательно. Можно сделать вывод, что аналитикам хорошо в своем обществе, редкий человек способен завоевать их расположение и вызвать желание постоянно общаться. Ваш покорный слуга как раз из таких (отчасти).

Чтобы продать услугу таким клиентам, необходимо четко аргументировать положительные стороны продукта. При проведении презентации делайте ставку на логику, а не на эмоции. Будьте готовы к тому, что вам будут задавать много вопросов. Закрывая сделку, действуйте настойчиво, но не агрессивно, предоставьте время на принятие решения.

Моя карьера в продажах программного обеспечения для бизнеса началась в 2006 году. Именно тогда я начал продавать систему для отправки отчетности в контролирующие органы СБиС. В тот период мне довелось много работать с бухгалтерами – они в большинстве своем принадлежат к психотипу аналитиков. Склонить такого клиента на свою сторону часто достаточно сложно. Но если вам это удалось, будьте уверены – вы получили отличного клиента на всю жизнь.

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

Вы когда-нибудь были на семинаре для бухгалтеров? Если в зал, рассчитанный на 100 человек, придет всего 10, они рассредоточатся по всему помещению.

Аналитики боятся ошибок, поскольку убеждены, что если они что-то делают, то должны делать это со 100 %-ной ответственностью и на 100 % правильно.

Чтобы заинтересовать аналитика своим продуктом, необходимо говорить о фактах и неоспоримых преимуществах: «Продукт проверен временем – он надежен. Стабильность работы серверов – 99,9 %. Продукт используют такие компании, как Х, Y, Z, на сайте вы можете прочесть отзывы. Внедрив этот продукт в своей компании, вы наведете там полный порядок. Все будет разложено по полочкам, рутинные операции будут автоматизированы». И так далее в том же ключе.

Среди драйверов часто встречаются руководители и директора. Название «драйверы» говорит само за себя. Они постоянно проявляют инициативу, предпочитают действовать и командовать. Эти люди прекрасно подходят для задействования в организационных процессах, а также быстро принимают решения. Драйверы не любят тратить много времени на раздумья, предпочитая повиноваться собственному мнению и от него не отступать. Даже если было принято неверное решение, они все равно не станут вас слушать. Как правило, люди, относящиеся к данному психотипу, считают себя умными, они самоуверенны (привет моему старшему брату Михаилу!). В большей или меньшей степени именно такой подход и приносит им значительный успех в обществе.

Разговор с драйвером может быть не самым приятным. Причина заключается в настойчивости и конкретности таких людей. Если вы сказали: «Сделаю», значит, должны сделать. Неважно при этом, умерла ваша любимая кошка или сами вы заболели, – эти вопросы второстепенные. Манера вести разговор у драйверов своеобразная: речь громкая, фразы короткие и четко произнесенные.

§

Наш Санкт-Петербургский Союз предпринимателей – одна из самых массовых организаций деловых людей Санкт-Петербурга – уже более 27 лет помогает состоящим в наших рядах предприятиям малого и среднего бизнеса успешно развивать свое дело, представляя и защищая, если требуется, их интересы в органах законодательной и исполнительной власти, активно ведет подготовку, переподготовку предпринимательских кадров. И книга, которую вы держите в руках, послужит вам учебным пособием, научит, как эффективней, «на результат» вести деловой диалог с партнерами.

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

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

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

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

Книг по коммуникациям много. Но, как правило, в каждой из них описывается какая-то одна ключевая идея. Мы решили собрать в нашей книге все самое ценное, что поможет вам лучше понимать людей, их потребности и страхи. Эти советы помогают достигать успеха нам самим, помогут и вам. Самое главное – советы просты для понимания и вы сможете применить их незамедлительно.

В книге большое количество материала, который вы не найдете в печатном виде. Это и наш собственный опыт, и советы экспертов в области коммуникации.

1. Читайте вдумчиво, не пробегайте глазами текст. Эта книга нужна вам для практического применения. Возьмите лист А4, напишите заголовок «На внедрение» и записывайте идеи, которые начнете реализовывать прямо сейчас. Именно действия помогут вам продвинуться вперед.

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

3. Перечитывайте эту книгу хотя бы раз в месяц. Используйте ее как учебное пособие, которое помогает вам общаться успешно.

4. Проверяйте каждую неделю, каких успехов вы добились. Задавайте себе вопросы о провалах и ошибках, улучшениях, уроках, которые вы извлекли.

5. Ведите записи о проделанной работе и достигнутых результатах. Ничто так не мотивирует, как изучение прошлых достижений!

А теперь за дело!

«Узнайте, что нужно людям, и дайте им это» – вот главный принцип эффективных коммуникаций, проверенный на практике (но его мало кто соблюдает!). Гораздо удобнее и проще делать то, что нужно нам самим.

Рассмотрим пример. Вы продаете сложный продукт или услугу потенциальному клиенту. Наверняка у вас часто возникают две ситуации:

• клиент не знает, чего он на самом деле хочет;

• клиент частично обманывает. Чаще всего – неосознанно.

Мы не должны ловить за руку клиента и доказывать тому, что он не прав. Не надо создавать у него комплекс вины. Не надо спорить. Все это отталкивает, и в результате не прав менеджер по продажам. Потому что менеджер по продажам прав только в одном случае: когда он продал и получил неплохую комиссию. Клиенту всегда нужен результат. А процесс может быть описан и сконструирован на практике разными способами. Возможно, что совсем не так, как вроде бы «хотел» клиент.

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

Важно, чтобы клиент чувствовал себя правым не только потому, что решение, которое он захотел купить, работает, но и потому, что он правильно поступил, выбрав именно вашу компанию.

Рассказывает Николай Иванов

Однажды я настраивал систему «Мегаплан» в компании «Форполимер» (Санкт-Петербург). После выполнения работы попросил директора компании Владимира Дубко дать короткий отзыв о моей работе. Вот его слова: «Скажу честно, что не очень люблю обращаться к аутсорсинговым компаниям, поскольку обычно на объяснение того, что тебе нужно, требуется много времени и сил. Ведь для написания грамотного технического задания нужно знать 80 % того, что знает исполнитель. Однако работа с Николаем меня приятно удивила. Во-первых, Николай умеет слушать и слышать. Он четко услышал задачу и грамотно структурировал ее. Во-вторых, на встрече мы достигли договоренностей о сроках и цене работы. А самое главное – реализация заняла минимальное время. Более того, Николай работал на моем компьютере, объясняя каждый шаг. И последующие мелкие коррективы мне удалось внести без труда».

Мораль: с пониманием относитесь к попыткам клиента объяснить, что же ему от вас нужно. Не судите строго, если вы поймете, что клиент вас обманул. Люди часто обманывают, путаются в мыслях, ошибаются, говорят не то, что думают. Но как часто вы прощали это самим себе и как часто другим? Очень просто сказать, что «мне надоело, клиент такой-сякой». Но это слабость.

Если вы не сможете ничего изменить для этого клиента в лучшую сторону, то и для вас ничего не изменится. Например, зарплата не вырастет. Может ли менеджер по продажам называть себя профессионалом и думать о себе хорошо, если его доход стабильно невысок и не растет долгое время?

Ваша цель – не самоутвердиться за счет клиента, не пожаловаться на несправедливость и обстоятельства. Ваша цель – заработать денег для компании и для себя. А у лучших менеджеров еще цель – помочь другим людям (своим клиентам). Посмотрите на коллег, которые зарабатывают больше вас. Как у них обстоят дела с клиентской лояльностью и терпимостью? Что они называют целью своей работы? И сравните их с собой. Возможно, вы увидите что-то, что мешает вам заработать больше денег.

«Добрый день, это Иван, Вам удобно разговаривать? Вы смотрели наше решение, есть ли у вас вопросы по функционалу?» Знакомые фразы? Вы знаете, о чем вы спрашиваете? Ответ простой: ни о чем.

Контакт должен быть сосредоточен на основных проблемах клиента. Вы думаете, что проблемы клиентов заключаются в незнании всех фишек вашего товара или услуги? Если вы говорите с клиентом, это значит, что он:

• пришел к вам;

• оставил свою контактную информацию;

Дополнительный анализ:  Пример основ бухгалтерского анализа
Оцените статью
Аналитик-эксперт
Добавить комментарий